0

我需要将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

4

2 回答 2

1

确保您的类符合<NSCoding>协议(因此您的类定义为@interface OrderedDictionary <NSCoding>
否则,框架不知道它应该调用encodeWithCoder:

于 2013-07-15T09:21:44.453 回答
1

请参考下面的链接,也许你会得到正确的解决方案。

在 NSMutableDictionary 的派生类中未调用 encodeWithCoder

何时调用 encodeWithCoder?

祝你好运 !!!!

于 2013-07-18T11:45:38.520 回答