保存自定义对象的 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,它只能记录原始对象(数字、字符串、日期和数据)的子集。因此,虽然您可以使用 NSCodingNSKeyedArchiver 来归档对象,但另一种选择是将对象编组为字符串或数据表示,将 that 存储在属性列表中,然后再次解组它们正在加载。

【讨论】:

【参考方案2】:

是的,你想使用 NSKeyedArchiver

您需要的所有信息都可以在这里找到:

http://developer.apple.com/library/ios/ipad/#documentation/Cocoa/Conceptual/Archiving/Archiving.html

【讨论】:

以上是关于保存自定义对象的 NSArrays 的 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章

将对象保存到 Firebase

如何将自定义对象保存在包含更多自定义对象的数组中

使用自定义 uitableviewcell 滚动 tableview 的问题

自定义 UITableViewCell 打开不同的 xib 子视图

保存自定义对象的 NSMutableArray

在 iOS 中保存/序列化自定义对象的正确方法