使用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对象(包括嵌套的NSArray
, NSDictionary
和自定义对象)的任何数据结构(甚至是非常复杂的)归档到文件中。 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];
- Metal Camera教程奖金:在iOS Simulator中运行Metal项目
- iOS 7访问企业应用程序中的UUID值(不适用于AppStore)
- iOS应用程序提交和testing评估过程
- iOS 10,NSUserDefaults不起作用
- 在iOS 9.3 / Xcode 7.3中使用StoreKit常量时使用未parsing的标识符
- 从iPhone转发地理编码
- UITabBarItem setFinishedSelectedImage:在iOS7中已弃用
- 我怎样才能得到UITextFieldDelegate.shouldChangeCharactersInRange与自定义inputView触发?
- iOS标签栏图标不断变大