/ / NSDictionary: validationhash nie sprawdza poprawności (Secure-NSUserDefaults) - ios, objective-c, hash, md5, nsuserdefaults

NSDictionary: validationhash nie sprawdza poprawności (Secure-NSUserDefaults) - ios, object-c, hash, md5, nsuserdefaults

Używam tej klasy pomocnika: Secure-NSUserDefaults

Mam problem z plikiem validationhash różni się od przechowywanego skrótu dla NSDictionary, gdy zmodyfikuję ten drugi i spróbuję go zapisać ponownie.

Oto mój kod:

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];
}

Kiedy uruchamiam ten kod po raz, zabij aplikację i uruchom ją ponownie, wszystko działa tak, jak powinno, a validationhash mecze. W rzeczywistości zawsze pasuje poprawnie przy pierwszym uruchomieniu. Innymi słowy: mój kod zapisuje bezpieczny słownik i plik haszysz dopasowania w kolejnej aplikacji działają dobrze (raz).

ALE - jeśli uruchomię ten sam kod drugi raz bez zabijanie aplikacji między uruchomieniami, plik validationhash jest inny, a plik &ważny sprawdzenie kończy się niepowodzeniem.

Udało mi się wyśledzić problem do tej linii:

[newModDict setObject:modArray forKey:modKey];

Jeśli to skomentuję, to cały czas działa dobrze, ale oczywiście modyfikacja, którą próbuję wprowadzić, nie jest w ogóle wprowadzana, po prostu kopiuję Słownik „taki, jaki jest”.

Mam problem ze zrozumieniem, co robię źle lub jak zmodyfikować i ponownie zapisać NSDictionary, aby haszysz mecze.

Z góry dziękuję za pomoc!

Odpowiedzi:

0 dla odpowiedzi № 1

LOL! Zabawne, jak czasami zwięzłe napisanie pytania wyzwala nowe pomysły. Po prostu przyszło mi do głowy, co mam zrobić, i właśnie teraz rozwiązałem to w ten sposób:

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

tj. musiałem dokonać edycji NSArray niemodyfikowalne najpierw.

Może ktoś skorzysta na odpowiedzi. Jestem zbyt zażenowany, by wspomnieć, jak długo pracowałem nad tym zeszłej nocy.