2014-02-09 31 views
0

我使用这个辅助类:Secure-NSUserDefaults的NSDictionary:validationhash无法验证(安全-NSUserDefaults的)

我运行到其中validationhash从存储的哈希不同的NSDictionary中,当我修改的问题后者并尝试再次保存。

这里是我的代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
BOOL valid = NO; 
NSDictionary * modDict = [defaults secureDictionaryForKey:aKey valid:&valid]; 
if (!valid) { 
    //handle 
} 
for (NSString * modKey in modDict) { 
     NSMutableArray * modArray = [[modDict objectForKey:modKey] mutableCopy]; 
     NSString * newValue = @"newValue"; 
     [modArray replaceObjectAtIndex:0 withObject:newValue]; 
     NSMutableDictionary *newModDict = [modDict mutableCopy]; 
     [newModDict setObject:modArray forKey:modKey]; 
     [defaults setSecureObject:newModDict forKey:aKey]; 
     [defaults synchronize]; 
} 

当我运行这段代码一次,杀应用程序,并再次启动它,所有的作品,因为它应该和validationhash匹配。事实上,它在第一次运行时始终匹配正确。换句话说:我的代码保存了安全字典和散列匹配的后续应用程序运行很好(一次)。

但是 - 如果我不杀运行之间的应用程序运行相同的代码第二次,该validationhash是不同的,而&有效检查失败。

我能跟踪下来的问题这一行:

[newModDict setObject:modArray forKey:modKey]; 

如果我评论它,它工作正常,所有的时间,但随后的过程中,修改我试图让ISN”完全没有,我简单地复制字典“原样”。

我努力弄清楚我做错了什么,或者如何修改和重新保存NSDictionary,以便散列匹配。

在此先感谢您的帮助!

回答

0

大声笑!有趣的是,有时候用简明的方式写下问题会引发新的想法。它只是发生在我身上了我必须做的,现在只是解决了它这样的:

[newModDict setObject:[modArray copy] forKey:modKey]; 

即我不得不做出的编辑NSArray非易变第一。

也许有人会从答案中受益。我很尴尬地提及我在这个昨晚工作了多久。