Intereting Posts
Работает ли iOS с пониженной производительностью, когда батарея разряжена? Как контролировать использование данных в iOS из приложения? Что делает опция командной строки mtouch –argument? Показать параметры удаления содержимого приложения iOS в приложении «Настройки» Хорошо ли утверждать, что объект содержит определенные методы, когда известно, что этот объект соответствует протоколу? Невозможно прокрутить UIImageView с помощью AspectFill в UIScrollView и AutoLayout viewDidLoad в подклассе UITextView? AVAssetWriterInput Video Не получается Как использовать XCTestSuite? (Swift 3) IAP Восстановление неиспользуемого элемента с ненужными транзакциями обновления и странной транзакцией Как я могу сделать приложение для iPhone доступным для некоторых конкретных клиентов? Контроллер просмотра Safari Сортировка массива строк путем привязки поиска второго, третьего и т. Д. Слова Как перейти к различным контроллерам представлений на основе выпадающего меню Просмотр стека в iOS

Странное поведение только с одним устройством и NSDate

После нескольких недель работы я наконец опубликовал свое приложение вчера 🙂 20 iphones загрузили мое приложение, и только один из них имеет проблему. У меня нет абсолютно никакого способа отладить его, потому что у меня нет доступа к устройству, у которого есть проблема.

Прежде всего, я получаю json (который хорошо декодируется даже на устройстве), затем я извлекаю дату:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [formatter setTimeZone:[NSTimeZone systemTimeZone]]; NSDate *date = [formatter dateFromString:[myData objectForKey:@"date"]]; 

Я хочу знать, когда была эта дата, поэтому я использую эту функцию:

 [DateManager getDateFromNow:date]; 

Что приводит к этому коду:

 + (NSString *) getDateFromNow: (NSDate*) aDate{ NSDate *now = [[NSDate alloc] init]; // Get the system calendar NSCalendar *sysCalendar = [NSCalendar currentCalendar]; // Get conversion to months, days, hours, minutes unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSSecondCalendarUnit; NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:aDate toDate:now options:0]; int second =[conversionInfo second]; int minute =[conversionInfo minute]; int hour =[conversionInfo hour]; int day =[conversionInfo day]; if(day != 0){ if(day == 1){ return [NSString stringWithFormat:@"1 day ago"]; }else{ return [NSString stringWithFormat:@"%i days ago", day]; } }else if(hour != 0){ if(hour == 1){ return [NSString stringWithFormat:@"1 hour ago"]; }else{ return [NSString stringWithFormat:@"%i hours ago", hour]; } }else if(minute !=0){ if(minute == 1){ return [NSString stringWithFormat:@"1 minute ago"]; }else{ return [NSString stringWithFormat:@"%i minutes ago", minute]; } }else{ if(second == 1){ return [NSString stringWithFormat:@"1 second ago"]; }else{ return [NSString stringWithFormat:@"%i seconds ago", second]; } } } 

Моя проблема в том, что только для одного устройства дата рассчитывается как «4932 дня назад», а для всех других устройств она работает хорошо. Вот дата: date: "2014-07-04 13:38:01"

Есть ли у вас какая-либо информация о том, что может быть неправильным?

Спасибо заранее…

4932 дней назад был первым январем 2001 года. Дата ссылки на яблоко.

    Я думаю, что проблема заключается в systemTimeZone или NSCalendar .

    Когда вы выполняете преобразование строки даты, вы должны установить NSCalendar.

     NSCalendar *sysCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; // set your NSDateFormatter with calendar. formatter.calendar = sysCalendar; 

    Это поможет, и еще одна вещь: вы всегда должны устанавливать дату или временную метку UTC с конца сервера.

    Благодарю. Может быть, это поможет вам.