Простой анализ NSDateFormatter/строки

2012-10-12 19:29:43

Эквивалент NSDateFormatter:

[_dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

Выбрасывает исключение... Почему?

Спасибо!

Ссылка: http://waracle.net/mobile/iphone-nsdateformatter-date-formatting-table/

ОБНОВЛЕНИЕ:

Проблема, кажется, в строке. Если я жестко закодирую строку:

NSString * string = @"2012-10-12 19:29:43";

Это работает нормально.

Я прочитал его из массива пар ключ-значение, поэтому я делаю:

NSString * string = [NSString stringWithFormat:@"%@", (NSString *)[[NSArray readFromPlistFile:@"latestchangesdates"] valueForKey:@"newsLastEdited"]];

Вывод в консоль:

#1:

2012-10-12 10:16:49

#2:

( "2012-10-12 10:16:49" )

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

ОБНОВЛЕНИЕ 2:

[[[NSArray readFromPlistFile:@"latestchangesdates"] objectAtIndex:0] valueForKey:@"newsLastEdited"]]

... наконец сделал это.


person DAS    schedule 13.10.2012    source источник
comment
Что показывает исключение ??   -  person IronManGill    schedule 13.10.2012
comment
Что ты имеешь в виду? Thread 6: Signal SIGABRT ? '-[__NSArrayI length]: unrecognized selector sent to instance 0x89a8170'   -  person DAS    schedule 13.10.2012
comment
... хм, кажется законным. Работает, если не задавать строку динамически.   -  person DAS    schedule 13.10.2012
comment
Пожалуйста, смотрите мой обновленный ответ. :)   -  person DAS    schedule 13.10.2012


Ответы (2)


Похоже, что ключ newsLastEdited в вашем файле Plist фактически возвращает массив, а не строку.

Линия:

NSString *string = [NSString stringWithFormat:@"%@", (NSString *)[[NSArray readFromPlistFile:@"latestchangesdates"] valueForKey:@"newsLastEdited"]];

просто приводит к NSString возвращаемое значение из [[NSArray readFromPlistFile:@"latestchangesdates"] valueForKey:@"newsLastEdited"]. Это не делает автоматически возвращаемое значение строкой.

Что произойдет, если вместо этого вы используете следующее:

NSString *string = [[[NSArray readFromPlistFile:@"latestchangesdates"] valueForKey:@"newsLastEdited"] objectAtIndex:0];

Если я прав, это возьмет первый элемент массива, возвращенного из ключа Plist newsLastEdited. Если это сработает, вам, вероятно, потребуется некоторое время, чтобы понять структуру данных, хранящуюся в файле Plist.

person mttrb    schedule 13.10.2012

[[[NSArray readFromPlistFile:@"latestchangesdates"] objectAtIndex:0] valueForKey:@"newsLastEdited"]]

... наконец сделал это.

person DAS    schedule 15.10.2012