保存自定义对象的 NSArrays 的 NSDictionary
Posted
技术标签:
【中文标题】保存自定义对象的 NSArrays 的 NSDictionary【英文标题】:Saving an NSDictionary of NSArrays of custom objects 【发布时间】:2010-11-20 23:04:07 【问题描述】:我有一个包含 nsarrays 的字典(如果有区别,它是可变的),它又包含(NSObject 的子类)s 我已经像这样实现了 initWithCoder 和 encodeWithCoder:
-(id)initWithCoder:(NSCoder *)aDecoder
self = [super init];
self.Title = [aDecoder decodeObjectForKey:@"Title"];
self.SiteAPIURL = [aDecoder decodeObjectForKey:@"SiteAPIURL"];
self.ID = [aDecoder decodeObjectForKey:@"ID"];
return self;
-(void) encodeWithCoder:(NSCoder *)aCoder
[aCoder encodeObject:self.Title forKey:@"Title"];
[aCoder encodeObject:self.SiteAPIURL forKey:@"SiteAPIURL"];
[aCoder encodeObject:self.ID forKey:@"ID"];
但是当我做[dictionary writeToFile:savepath atomically:YES];
时它没有正确保存
那么我做错了什么,序列化到底是什么,我需要使用 NSKeyedArchiver 什么的吗?
【问题讨论】:
你能解决这个问题吗?我有相同的确切数据结构(当然数组中的不同自定义对象)并且我已经尝试实现保存我的字典几天了。我还在我的对象类中实现了 initWitCoder 和 encodeWithCoder,并且我尝试使用 UserDefaults 和 plist,但我都无法工作。任何帮助表示赞赏! @Ryan,您需要使用 NSKeyedArchiver 和 NSCoding 协议,请参阅接受的答案和 Apple 文档。 【参考方案1】:[NSDictionary writeToFile: atomically:]
使用NSPropertyListSerialization
,它只能记录原始对象(数字、字符串、日期和数据)的子集。因此,虽然您可以使用 NSCoding
和 NSKeyedArchiver
来归档对象,但另一种选择是将对象编组为字符串或数据表示,将 that 存储在属性列表中,然后再次解组它们正在加载。
【讨论】:
【参考方案2】:是的,你想使用 NSKeyedArchiver
您需要的所有信息都可以在这里找到:
http://developer.apple.com/library/ios/ipad/#documentation/Cocoa/Conceptual/Archiving/Archiving.html
【讨论】:
以上是关于保存自定义对象的 NSArrays 的 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章
使用自定义 uitableviewcell 滚动 tableview 的问题