2010-11-07 63 views
2

我做:iPhone PLIST和NSDate的问题

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的类型时(被列为“日期时间”)

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

它抛出的NSLog为alarmDicts是零,并返回nil的字符串。我没有想法,并试图解决这个问题几个小时。有人有主意吗?

另外,如果我打印出日期时间的描述,它完美的作品。当我尝试在其上使用NSDateFormatter时,只有nils和错误。

回答

2

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

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

我会怀疑他们正在加载NSString的,这NSDateFormatter将下降到过程 - 但他们仍将出现正确记录。

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

+0

是啊,这只是片段。你是对的。虽然它表示它是一个NSDate对象,但我重新创建了.plist文件,现在它可以工作。感谢您的输入!好像我需要一双新的眼睛。 – Pete 2010-11-07 18:26:55