NSKeyedArchiver archivedDataWithRootObject: 的参数应该是我要保存的数组,还是转换为 NSData 的数组?
裕二的回答是对的。但更准确地说,您的数组元素必须实现协议并将您自己的代码填充到方法 initWithCoder: 和encodeWithCoder:
喜欢:
- (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"];
}
然后你可以使用 archiver 和 unchariver,例如:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"];
NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"];
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData];
更多内容,您可以参考“使用 NSCoding 归档 Objective-C 对象 http://soff.es/archiving-objective-c-objects-with-nscoding".
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)