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 № 1LOL! 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.