NSDictionary:validationhash无法验证(Secure-NSUserDefaults)

时间:2014-02-09 14:38:08

标签: ios objective-c hash md5 nsuserdefaults

我正在使用这个助手类:Secure-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 会有所不同,并且< em>&amp; valid 检查失败。

我能够将问题追溯到这一行:

[newModDict setObject:modArray forKey:modKey];

如果我发表评论,它一直都可以正常工作,但当然,我试图做的修改根本就没有,我只是按照原样复制字典。

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

LOL!有趣的是,有时如何以简洁的方式写下问题会引发新的想法。它刚刚发生在我必须做的事情上,现在才解决它:

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

即。我必须先编辑NSArray不可变的。

也许有人会从答案中受益。我太尴尬了,不知道我昨晚工作了多久。