2010-05-12 79 views
0

用於獲取plist類型爲dictionary的項目的數據類型,即nsmutabledictionary或nsdictionary是什麼?因爲我使用以下代碼從plist中的字典數組中檢索字典對象。從plist中獲取字典對象的問題iphone sdk

NSMutableDictionary *_myDict = [contentArray objectAtIndex:0]; //APP CRASHES HERE 

NSLog(@"MYDICT : %@",_myDict); 
NSString *myKey = (NSString *)[_myDict valueForKey:@"Contents"] ; 

[[cell lblFeed] setText:[NSString stringWithFormat:@"%@",myKey]]; 

在這裏,第一行顯示了objc_msgsend。 ContentArray是一個nsarray,它的內容顯示了plist中的2個對象。在plist中,它們是字典對象。那爲什麼這個錯誤呢?

編輯:

基本上,我在控制檯contentArray的內容如下所示:

CONTENT ARRAY : 
(
    { 
    favourites = 0; 
    id = 0; 
    story = "This is my first record"; 
    timestamp = 324567; 
}, 
    { 
    favourites = 0; 
    id = 1; 
    story = "This is my second record"; 
    timestamp = 321456; 
} 
) 

我想要從內容數組這些字典對象。

任何人都可以請幫忙嗎?

這真的很緊急。

Thanx提前。

+0

有什麼確切的內容你.plist(不要總結它)?什麼是確切的錯誤信息?如果錯誤導致你的應用程序崩潰,在哪一行崩潰? – 2010-05-12 09:46:51

+0

plist內容如上。我得到objc_msgsend消息,在控制檯中沒有任何東西。應用程序在上述行崩潰。 – neha 2010-05-12 10:02:28

+0

那裏有什麼「故事」?什麼是「根」標籤? PList具有相當嚴格的語法。數組是「數組」,字典使用「字典」標籤等。 – bealex 2010-05-12 10:09:38

回答

2

NSDictionary。你不能簡單地說

NSMutableDictionary *_myDict = [contentArray objectAtIndex:0]; 

並希望,這是一個可變的字典現在。這仍然是一種不可改變的正常情節。所以,你應該寫這樣的東西:

NSMutableDictionary *_myDict = [NSMutableDictionary dictionaryWithDictionary:[contentArray objectAtIndex:0]]; 

這將創建一個在plist中的可變字典。

您可以在 「屬性列表編程指南」 中閱讀它,http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/PropertyLists/index.html

更新:

而且你有一個奇怪的plist內容。可用的XML-的plist類型都提到: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/PropertyLists/AboutPropertyLists/AboutPropertyLists.html#//apple_ref/doc/uid/10000048i-CH3-SW1

和整體XML的plist中的結構描述如下: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/PropertyLists/UnderstandXMLPlist/UnderstandXMLPlist.html#//apple_ref/doc/uid/10000048i-CH6-SW1

工作的一段代碼

void test() { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    NSMutableArray *arrayIWillWrite = [NSMutableArray array]; 
    NSMutableDictionary *dictionary; 

    dictionary = [NSMutableDictionary dictionary]; 
    [dictionary setObject:[NSNumber numberWithInt:0] forKey:@"favourites"]; 
    [dictionary setObject:[NSNumber numberWithInt:0] forKey:@"id"]; 
    [dictionary setObject:@"This is my first record" forKey:@"story"]; 
    [dictionary setObject:[NSNumber numberWithInt:324567] forKey:@"timestamp"]; 
    [arrayIWillWrite addObject:dictionary]; 

    dictionary = [NSMutableDictionary dictionary]; 
    [dictionary setObject:[NSNumber numberWithInt:0] forKey:@"favourites"]; 
    [dictionary setObject:[NSNumber numberWithInt:1] forKey:@"id"]; 
    [dictionary setObject:@"This is my second record" forKey:@"story"]; 
    [dictionary setObject:[NSNumber numberWithInt:321456] forKey:@"timestamp"]; 
    [arrayIWillWrite addObject:dictionary]; 

    [arrayIWillWrite writeToFile:@"/Users/alex/test.plist" atomically:NO]; 

    NSArray *arrayThatWasRead = [NSArray arrayWithContentsOfFile:@"/Users/alex/test.plist"]; 
    NSLog(@"%@", arrayThatWasRead); 

    NSDictionary *dictionaryFromArrayThatWasRead = [arrayThatWasRead objectAtIndex:0]; 
    NSLog(@"%@", dictionaryFromArrayThatWasRead); 

    [pool release]; 
} 
+0

Alexander Babaev,我試着按照你的建議做,但沒有成功,它仍然在同一行顯示我objc_msgsend。我想從nsarray中獲取第一個字典對象。 – neha 2010-05-12 08:40:10

+0

你能顯示確切的消息,它顯示你嗎?什麼信息是錯誤的,它發送了什麼對象? – bealex 2010-05-12 10:06:52

+0

它顯示我objec_msgsend。控制檯沒有什麼在這裏我創建了一個nsdictionaries數組。這可以嗎?或者它應該是一個數組字典? – neha 2010-05-12 10:09:36