2011-03-27 72 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