2014-02-09 33 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非易變第一。

也許有人會從答案中受益。我很尷尬地提及我在這個昨晚工作了多久。