2010-11-07 64 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