我有一个字典(如果它有所不同,它是可变的)包含nsarrays,而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或其他东西吗?
答案 0 :(得分:2)
[NSDictionary writeToFile: atomically:]
使用NSPropertyListSerialization
,它只能记录原始对象的子集(数字,字符串,日期和数据)。因此,虽然您可以使用NSCoding
和NSKeyedArchiver
来存档对象,但另一个选项是将对象编组为字符串或数据表示形式,将 存储在属性列表中,并在装载时再次解组。
答案 1 :(得分:0)
是的,您想使用NSKeyedArchiver
您可以在此处找到所需的所有信息:
http://developer.apple.com/library/ios/ipad/#documentation/Cocoa/Conceptual/Archiving/Archiving.html