2010-11-20 79 views
1

我有一本字典(这是可变的,如果有差别),其中包含nsarrays,又包含(NSObject的子类)■ 我已经实现的initWithCoder和encodeWithCoder这样的:保存自定义的NSArrays的一个NSDictionary对象

-(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

你能解决这个问题吗?我具有相同的确切数据结构(数组中的不同自定义对象),我一直在尝试实现将字典保存数天。我也在我的对象类中实现了initWitCoder和encodeWithCoder,并且我试图使用UserDefaults和plists,但是我无法让它们工作。任何帮助感谢! – RyanG 2011-05-24 13:24:38

+0

@Ryan,你需要使用NSKeyedArchiver和NSCoding协议,查看接受的答案和Apple文档。 – 2011-05-24 13:33:42

回答

2

[NSDictionary writeToFile: atomically:]使用NSPropertyListSerialization,它只能记录原始对象的子集(数字,字符串,日期和数据)。因此,虽然您可以使用NSCodingNSKeyedArchiver一起存档对象,但另一个选项是将您的对象封送到字符串或数据表示中,将存储在属性列表中,并在加载时再次解组。

相关问题