我需要把OrderedDictionary保存到NSUserDefaults。
我读过这里,并在许多其他文章中看到了如何做到这一点:
-(id)initWithCoder:(NSCoder *)decoder{
if (self != nil){
dictionary = [decoder decodeObjectForKey:@"dictionary"];
array = [decoder decodeObjectForKey:@"array"];
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject: dictionary forKey:@"dictionary"];
[encoder encodeObject: array forKey:@"array"];
}然后我就这样叫它:
OrderedDictionary *od = [OrderedDictionary dictionaryWithDictionary:[businessInfo objectForKey:@"allowedStates"]];
NSData *archivedObject = [NSKeyedArchiver archivedDataWithRootObject:od];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:archivedObject forKey:@"allowedStates"];
[defaults synchronize];然后像这样解压缩:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *archivedObject = [defaults objectForKey:@"allowedStates"];
OrderedDictionary *countryStates = (OrderedDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:archivedObject];我看到archivedObject不是空的,但是countryStates是空的,尽管当我保存它时它不是空的。
怎么样?
如何成功地存档OrderedDictionary
编辑的
正在调用方法initWithCoder,但不调用encodeWithCoder。
发布于 2013-07-18 11:45:38
发布于 2013-07-15 09:21:44
确保类符合<NSCoding>协议(因此类定义读取@interface OrderedDictionary <NSCoding>)
否则,框架不知道它应该调用encodeWithCoder:
https://stackoverflow.com/questions/17648728
复制相似问题