2011-03-27 83 views
2

假如我是一個數組保存數據這樣如何存檔NSDictionary的NSArray(使用NSCoding)?

wordList = [[NSMutableArray alloc] init]; 
while ([rs next])  //Some database return loop 
{ 
    wordDict = [[NSMutableDictionary alloc] init]; 

    [wordDict setObject:[NSNumber numberWithInt:[rs intForColumn:@"id"]] forKey:@"id"]; 
    [wordDict setObject:[rs stringForColumn:@"word"] forKey:@"word"]; 

    [wordList addObject: wordDict]; 

    [wordDict release]; 
    wordDict = nil; 
} 

但我想這個結果(即詞表)SQLite中儲存以備後用 - 我想用NSCoding。我會怎麼做? (如果存在問題,請隨時指出如何分配內容的錯誤)。

回答

3

如果您不堅持使用NSCoding進行序列化,則在NSArrayNSDictionary上都有writeToFile:atomically:方法。這會將您的對象序列化爲屬性列表(*.plist)。唯一的問題是要「序列化」的「樹」中的所有對象必須是NSString,NSData,NSArrayNSDictionary(請參閱文檔)。我不確定NSNumber如何適應,但有一點運氣,它也會被序列化和反序列化。將文件轉換回字典或數組的逆方法稱爲initWithContentsOfFile:

至於你的代碼,我只是使用[NSMutableDictionary dictionary]方便的方法,讓你一個自動釋放字典。它比通常的alloc & init短,並且爲顯式發佈保存一行。

+0

'NSNumber'和'NSDate'在plists中都可以正常工作。也不需要'wordDict = nil;' – amattn 2011-03-27 07:59:29

+0

如果我將結果存儲到數據庫(SQLite)而不是寫入文件,我可以使用類似的東西嗎? – Gazzer 2011-03-27 08:49:30

+1

屬性列表是一個字符串,你可以將它存儲在任何地方。我只是不確定這是否是最好的主意,你真的想做什麼? – zoul 2011-03-27 08:57:40