使用NSKeyedArchiver来存储自定义数据模型

我正在开发一个rss阅读器。 这只是一个tableview,每个单元格显示一个自定义的数据模型RSSEntry。 我有一个NSMutableArray的所有条目,其中包含我从服务器获得的所有RSSEntry。 这就是RSSEntry的样子:

@interface RSSEntry : NSObject <NSCoding> { NSString *_blogTitle; NSString *_articleTitle; NSString *_articleUrl; NSDate *_articleDate; } 

我想从本地存档恢复数据,所以当我退出并再次打开这个应用程序时,tableview上次刷新时填充数据。

我读过“开始iOS5编程”中的例子,但它只存储和恢复一个数据模型。 所以我不知道如何存储这个可变数组,并将其恢复到我的自定义数据模型。

我使用以下代码来存储和恢复数据:

 // STORE NSMutableData *data = [[NSMutableData alloc] init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:entry forKey:kDataKey]; [archiver finishEncoding]; // RESTORE NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath:kFilename]]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; RSSEntry *entries = [unarchiver decodeObjectForKey:kDataKey]; [unarchiver finishDecoding]; 

我只能以这种方式存储和恢复一个数据模型。

谁能帮我一把。 我是iOS编程的新手,可能有点沉闷。

将所有要存储的条目放入一个NSArray并使用以下代码:

 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:entries]; 

entries是您的条目数组。 很好很容易,只需要一行代码。

要取消存档,只需使用

 NSArray *entries = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

NSKeyedArchiver能够将实现NSCoding协议的Objective-C对象(包括嵌套的NSArrayNSDictionary和自定义对象)的任何数据结构(甚至是非常复杂的)归档到文件中。 NSKeyedUnarchiver执行相反的操作,将NSKeyedArchiver生成的任何数据重新创build归档的原始对象图。 从技术上讲,他们可能只是一个单一的类,但苹果公司决定分开他们的function,因为这是更正确的语法或东西:)

我假设你能够将生成的NSData对象写入一个文件,然后再读取它。

你可以存储一个NSDictionary如下

 NSDictionary *Your_NSDictionary = [NSDictionary dictionaryWithObjectsAndKeys: @"Obj1", @"Key1", @"Obj2", @"Key2", nil]; //store dictionary NSMutableData *yourData = [[NSMutableData alloc] init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:yourData]; [archiver encodeObject:Your_NSDictionary forKey: @"key"]; archiver finishEncoding]; [yourData writeToFile:@"FilePath" atomically:YES]; [yourData release]; [archiver release]; //Load dictionary NSData *yourData = [[NSMutableData alloc]initWithContentsOfFile:@"FilePath"]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:yourData]; Your_NSDictionary = [unarchiver decodeObjectForKey: @"key"]; [unarchiver finishDecoding]; [unarchiver release]; [yourData release];