8

OK, esto me está volviendo loco - ¡por favor dime que no me estoy volviendo loco!NSDictionary setValue:

yo anuncio

NSMutableDictionary* generalSettingsDict; 

im mi .h

que init:

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

en un viewWillAppear

puse:

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

en un método:

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

Y consigo "NSMutableDictionary no puede responder a setValue: forKey:" y la aplicación se bloquea cuando se ejecuta.

Por favor, ayudar :(

+1

También tiene un error tipográfico: forKey :, no forkey :. Y para el registro, 'NSMutableDictionary' es compatible con' setValue: forKey: ', pero todavía prefiero usar' setObject: forKey: '. – Alex

Respuesta

25

A) forkey: debería ser forKey:. La capitalización es importante.

B) setValue:forKey: es un método KVC. Puede funcionar como espera aquí, pero el método adecuado para usar NSMutableDictionary es setObject:forKey:

+0

También encontrará, incluso después de corregir el nombre del método, que las claves KVC deben ser cadenas. Debe usar el método nativo NSMutableDictionary 'setObject: forKey:' para usar objetos arbitrarios como claves. – Chuck

+0

¡Creo que necesito dormir un poco! ¡Gracias! –

4

¿Quieres setObject:forKey:. setValue:forKey: es parte del protocolo de codificación de clave-valor. NSMutableDictionary proporciona setObject:forKey:.