Проблемы с iPhone PList и NSDate - PullRequest
       2

Проблемы с iPhone PList и NSDate

2 голосов
/ 07 ноября 2010

Я делаю:

NSString *path = [[self class] pathForDocumentWithName:@"Alarms.plist"];
NSArray *alarmDicts = [NSMutableArray arrayWithContentsOfFile:path];

if (alarmDicts == nil)
{
    NSLog(@"MER. Unable to read plist file: %@", path);
    path = [[NSBundle mainBundle] pathForResource:@"Alarms"
                                               ofType:@"plist"];
    alarmDicts = [NSMutableArray arrayWithContentsOfFile:path];
}

_displayedObjects = [[NSMutableArray alloc]
                         initWithCapacity:[alarmDicts count]];

for (NSDictionary *currDict in alarmDicts)
{
    Alarm *alarm = [[Alarm alloc] initWithDictionary:currDict];
    [_displayedObjects addObject:alarm];
}

pathForDocumentWithName просто вспомогательный метод, предположим, что он работает (работает). Я добавляю все значения plist к объекту и сохраняю его в массиве. Теперь, если я сделаю что-то вроде этого:

NSUInteger index = [indexPath row];
id alarm = [[self displayedObjects] objectAtIndex:index];

NSString *title = [alarm title];
[[cell detailTextLabel] setText:title];

Работает отлично. Но при попытке отформатировать тип NSDate в файле plist (указан как «datetime»)

NSDate *datetime = [alarm datetime];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm"];
[[cell textLabel] setText:[formatter stringFromDate:datetime]];

Он выбрасывает NSLog для alarmDicts, равного nil, и возвращает nil для строки. У меня нет идей, и я несколько часов пытался решить эту проблему. У кого-нибудь есть идеи?

Кроме того, если я распечатываю описание для даты и времени, оно отлично работает. Только ноль и ошибки, когда я пытаюсь использовать NSDateFormatter на нем.

1 Ответ

2 голосов
/ 07 ноября 2010

Громадное предположение, но уверены ли вы, что даты в вашем списке свойств считываются как объекты NSDate?На вашем месте я бы проверил тип ваших очевидных объектов NSDate, например,

NSLog(@"%@", [[alarm datetime] class]);

Я бы подозревал, что они загружаются как NSStrings, которые NSDateFormatter откажется обрабатывать - но они 'По-прежнему будет отображаться запись в журнале.

Несвязанный комментарий: Я уверен, что это только ошибка копирования и вставки, но вы пропускаете объекты «Тревога» в нижней части вашего первого фрагмента кода.

...