iPhone PList和NSDate问题

时间:2010-11-07 17:40:51

标签: iphone objective-c ios4 plist

我在做:

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];

它完美无缺。但是当试图在plist文件中格式化NSDate类型时(列为'datetime')

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

它抛出NSLog for alarmDicts为nil,并为字符串返回nil。我没有想法,并且已经尝试了几个小时来解决这个问题。有人有什么想法吗?

另外,如果我打印出日期时间的描述,它可以很好地工作。当我尝试在其上使用NSDateFormatter时,只有nils和错误。

1 个答案:

答案 0 :(得分:2)

一个巨大的猜测,但你确定你的属性列表中的日期是作为NSDate对象读入的吗?如果我是你,我会检查你明显的NSDate对象的类型,例如

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

我怀疑它们是作为NSStrings加载的,NSDateFormatter会拒绝处理它们 - 但它们仍然会显示正确记录。

无关评论:我确定这只是一个复制粘贴错误,但是您在第一段代码底部泄漏了“警报”对象。