8

OK, to doprowadza mnie do szału - proszę, powiedz mi, że nie tracę rozumu!NSDictionary setValue:

oświadczam:

NSMutableDictionary* generalSettingsDict; 

im mój .h

ja procesu init:

generalSettingsDict = [[NSMutableDictionary alloc] initWithCapacity:5]; 

w viewWillAppear

ustawić:

[generalSettingsDict setValue:[NSNumber numberWithBool:control.on] 
         forkey:[NSNumber numberWithInt:control.tag]]; 

w metodzie:

-(void)settingChanged:(UISwitch*)control forEvent:(UIEvent *)event 

I dostać "NSMutableDictionary może nie reagować na setValue: forKey:" i awarii aplikacji, jeśli zostanie uruchomiona.

Proszę o pomoc :(

+1

Masz również literówkę: forKey :, nie forkey :. A dla rekordu 'NSMutableDictionary' obsługuje' setValue: forKey: ', ale nadal wolę używać' setObject: forKey: '. – Alex

Odpowiedz

25

A) forkey: powinny być forKey:. Kapitalizacja jest ważna.

B) setValue:forKey: jest metodą KVC. Może działać tak, jak oczekujesz, ale właściwą metodą użycia NSMutableDictionary jest setObject:forKey:

+0

Znajdziesz również, nawet po poprawieniu nazwy metody, że klucze KVC muszą być ciągami. Musisz użyć natywnej metody 'setObject: forKey:' NSMutableDictionary, aby używać dowolnych obiektów jako kluczy. – Chuck

+0

Myślę, że potrzebuję trochę snu !!! Dziękuję Ci! –

4

Chcesz setObject:forKey:. setValue:forKey: jest częścią protokołu kodowania klucz-wartość. NSMutableDictionary zapewnia setObject:forKey:.