首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSKeyedArchiver archivedDataWithRootObject:

NSKeyedArchiver archivedDataWithRootObject:
EN

Stack Overflow用户
提问于 2010-09-19 21:25:17
回答 2查看 17.1K关注 0票数 6

NSKeyedArchiver archivedDataWithRootObject:的参数应该是我试图保存的数组,还是转换为NSData的数组?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-20 00:42:57

要将泛型数组转换为NSData,您需要一个归档程序!如果您知道如何提供NSData,那么您就知道如何使用NSKeyedArchiver。所以:

代码语言:javascript
复制
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];

当然,array中的所有元素都需要实现encodeWithCoder:

票数 14
EN

Stack Overflow用户

发布于 2013-01-29 16:28:49

Yuji的答案是正确的。但更准确地说,数组元素必须实现协议,并将自己的代码填充到initWithCoder:和encodeWithCoder: like方法中:

代码语言:javascript
复制
- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        self.title = [decoder decodeObjectForKey:@"title"];
        self.author = [decoder decodeObjectForKey:@"author"];
        self.published = [decoder decodeBoolForKey:@"published"];
    }
    return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:title forKey:@"time"];
    [encoder encodeObject:author forKey:@"author"];
    [encoder encodeBool:published forKey:@"published"];
}

然后,您可以使用归档程序和解压程序,如下所示:

代码语言:javascript
复制
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"];

NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"];
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData];

更多信息,你可以参考"Archiving Objective-C Objects with NSCoding“。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3745842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档