Ios NSDictionary:validationhash无法验证(安全NSUserDefaults)

Ios NSDictionary:validationhash无法验证(安全NSUserDefaults),ios,objective-c,hash,md5,nsuserdefaults,Ios,Objective C,Hash,Md5,Nsuserdefaults,我正在使用此帮助器类: 我遇到了一个问题,当我修改NSDictionary并再次尝试保存它时,validationhash与存储的NSDictionary哈希不同 这是我的密码: NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; BOOL valid = NO; NSDictionary * modDict = [defaults secureDictionaryForKey:aKey valid:&val

我正在使用此帮助器类:

我遇到了一个问题,当我修改NSDictionary并再次尝试保存它时,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就不同了,&valid检查失败

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

[newModDict setObject:modArray forKey:modKey];
如果我把它注释掉,它会一直正常工作,但当然,我试图进行的修改根本没有进行,我只是照着原样复制字典

我正在努力找出我做错了什么,或者如何修改和重新保存NSDictionary以使哈希匹配


提前感谢您的帮助

哈哈!有趣的是,有时用简洁的方式写下一个问题会引发新的想法。我突然想到我要做什么,然后就这样解决了:

[newModDict setObject:[modArray copy] forKey:modKey];
i、 我必须首先使编辑的NSArray不可变

也许有人会从答案中受益。我很难为情地说我昨晚花了多长时间在这件事上