我正在使用这个助手类: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 匹配。
提前感谢您的帮助!
答案 0 :(得分:0)
LOL!有趣的是,有时如何以简洁的方式写下问题会引发新的想法。它刚刚发生在我必须做的事情上,现在才解决它:
[newModDict setObject:[modArray copy] forKey:modKey];
即。我必须先编辑NSArray
不可变的。
也许有人会从答案中受益。我太尴尬了,不知道我昨晚工作了多久。