是NSKeyedArchiver的参数archivedDataWithRootObject:应该是我想要保存的数组,或将数组转换为NSData?NSKeyedArchiver archivedDataWithRootObject:
6
A
回答
12
要将通用数组转换为NSData
,您需要存档器!如果你知道如何喂养NSData
,你知道如何使用NSKeyedArchiver
。所以:
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];
当然你array
需要的所有元素来实现encodeWithCoder:
。
13
Yuji的回答是对的。但更准确的说,您的数组元素必须实现协议和FILLIN自己的代码来的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"];
}
,那么你可以使用归档和unchariver,如:
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”。
相关问题
- 1. NSKeyedArchiver archivedDataWithRootObject:不会调用encodeWithCoder
- 2. NSKeyedArchiver不能存档阵列
- 3. 发生崩溃[的NSKeyedArchiver archivedDataWithRootObject:self.data]
- 4. NSKeyedArchiver&NSKeyedUnarchiver/Swift 3.0
- 5. 关于NSKeyedArchiver archiveRootObject:toFile:
- 6. 问题与NSKeyedArchiver
- 7. NSDictionary或NSKeyedArchiver
- 8. NSKeyedArchiver性能
- 9. SceneKit和NSKeyedArchiver
- 10. NSArchiver与NSKeyedArchiver
- 11. iPhone + NSCoding/NSKeyedArchiver
- 12. 同步NSKeyedArchiver或NSUserDefaults
- 13. NSKeyedArchiver内部格式
- 14. NSArchiver vs NSKeyedArchiver性能
- 15. 的NSKeyedArchiver INIT不叫
- 16. NSKeyedArchiver archiveRootObject和NSFileProtectionComplete/NSFileProtectionCompleteUnlessOpen
- 17. 的NSKeyedArchiver与NSMutableArrays和OData的对象导致内存泄漏
- 18. MKPolyline - > NSKeyedArchiver - > NSData SIGABRT
- 19. 的NSKeyedArchiver和的NSFileManager问题
- 20. 不NSUserDefaults的使用的NSKeyedArchiver
- 21. NSKeyedArchiver:键返回零 - Swift
- 22. 提取的NSString从的NSKeyedArchiver
- 23. NSKeyedArchiver线程安全吗?
- 24. 保存数据时的NSKeyedArchiver
- 25. 使用NSKeyedArchiver时崩溃
- 26. 从NSKeyedArchiver到NSString的NSData
- 27. 使用NSKeyedArchiver写数据
- 28. 的NSKeyedArchiver重复发出
- 29. NSKeyedArchiver archiveRootObject不断返回否
- 30. NSKeyedArchiver的默认目录
为了完整起见,您使用NSKeyedUnarchiver进行相反操作。 – 2011-01-12 09:07:45
“数组中的所有元素都需要实现encodeWithCoder:”< - 这仅仅是自定义对象需要的吗? – 2013-11-07 01:28:35
数组中的所有元素都需要由Apple或您执行'encodeWithCoder:'的实现。您可以通过查看官方文档来检查Apple提供的对象是否实现它...查看它是否实现了协议“NSCoder”。 – Yuji 2013-11-08 04:57:37