首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将自定义OrderedDictionary存储到NSUserDefaults

将自定义OrderedDictionary存储到NSUserDefaults
EN

Stack Overflow用户
提问于 2013-07-15 07:21:33
回答 2查看 124关注 0票数 0

我需要把OrderedDictionary保存到NSUserDefaults。

我读过这里,并在许多其他文章中看到了如何做到这一点:

代码语言:javascript
复制
-(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"];
}

然后我就这样叫它:

代码语言:javascript
复制
 OrderedDictionary *od = [OrderedDictionary dictionaryWithDictionary:[businessInfo objectForKey:@"allowedStates"]];
    NSData *archivedObject = [NSKeyedArchiver archivedDataWithRootObject:od];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:archivedObject forKey:@"allowedStates"];
    [defaults synchronize];

然后像这样解压缩:

代码语言:javascript
复制
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData *archivedObject = [defaults objectForKey:@"allowedStates"];
    OrderedDictionary *countryStates = (OrderedDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:archivedObject];

我看到archivedObject不是空的,但是countryStates是空的,尽管当我保存它时它不是空的。

怎么样?

如何成功地存档OrderedDictionary

编辑的

正在调用方法initWithCoder,但不调用encodeWithCoder。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-18 11:45:38

请参考下面的链接,可能会得到适当的解决方案。

在encodeWithCoder的派生类中不调用NSMutableDictionary

什么时候给encodeWithCoder打电话?

好运!

票数 1
EN

Stack Overflow用户

发布于 2013-07-15 09:21:44

确保类符合<NSCoding>协议(因此类定义读取@interface OrderedDictionary <NSCoding>)

否则,框架不知道它应该调用encodeWithCoder:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17648728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档