дата из строки вылетает устройство

Я читаю RSS и оттуда элемент: <pubDate>Thu, 07 Apr 2011 13:37:41 +0000</pubDate> Я использую следующий код, чтобы превратить полученную строку в NSDate

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];  

        [dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"]; // Thu, 18 Jun 2010 04:48:09 -0700 


        NSDate *date = [dateFormatter dateFromString:[self.currentDate stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]];        

        [item setObject:date forKey:@"date"]; 

Код отлично работает в симуляторе, но на устройстве происходит сбой. Причина в том, что объект NSDate остается нулевым, и когда я добавляю его в словарь, приложение вылетает.

Я много читал об этой проблеме, но ни одно из решений не помогло мне. Я имею в виду, многие из них сделали, но в симуляторе...

Любая помощь приветствуется, Лука...


person luigi7up    schedule 07.04.2011    source источник
comment
Можно вывести исходную строку даты на консоль, таким образом мы можем проверить правильность формата. Причина, по которой он равен нулю, заключается в том, что средство форматирования даты не может проанализировать строку даты. Вы должны проверить, является ли дата нулевой, прежде чем добавлять ее в массив, на всякий случай.   -  person rckoenes    schedule 07.04.2011


Ответы (2)


Отметьте две вещи, чтобы устранить различия между симулятором и устройством ios.

  1. Устройство iOS чувствительно к регистру. Поэтому вы должны проверить свою строку, если что-то не так.

  2. Настройки локали могут отличаться для вашего симулятора и iOS. чтобы предотвратить это, определите правильную локаль средства форматирования даты.

    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

    [dateFormatter setLocale:usLocale];

person Alkimake    schedule 07.04.2011
comment
Это была проблема установки локального для форматирования даты. Не могли бы вы объяснить мне, что делает setLocale? Это заставляет устройство использовать локальные настройки США вместо испанских, как в моем случае? Кроме того, могу ли я ожидать проблем на других устройствах? Большое спасибо. л - person luigi7up; 07.04.2011
comment
setLocale просто выполняет локализацию. Средство форматирования даты пытается проанализировать четверг вместо Jue как четверг, когда вы устанавливаете локаль en_US. - person Alkimake; 07.04.2011

Проверьте поведение своего форматтера,

[dateFormatter dateFromString:[NSDate date]]

Если это не формат форматтера, значит, виновата ваша nsstring.

Не могли бы вы записать строку, которую вы пытаетесь преобразовать? Это, наверное, тот, кто виноват

NSLog(@"string is: %@", self.currentDate);
person Stefan Ticu    schedule 07.04.2011