Estoy trabajando en un juego con monstruos. Cada uno tiene una lista de estadísticas que van a ser enteros. Puedo configurar cada estadística como su propia variable, pero preferiría mantenerlas en un NSDictionary ya que todas están relacionadas. Me encuentro con un problema cuando intento cambiar el valor de cada estadística.NSDictionary con valores enteros
lo que tengo:
-(id) init {
self = [super init];
if(self) {
stats = [NSDictionary dictionaryWithObjectsAndKeys:
@"Attack", 0,
@"Defense", 0,
@"Special Attack", 0,
@"Special Defense", 0,
@"HP", 0, nil];
}
return self;
}
Lo que yo quiero hacer
-(void) levelUp {
self.level++;
[self.stats objectForKey:@"Attack"] += (level * 5);
[self.stats objectForKey:@"Defense"] += (level * 5);
[self.stats objectForKey:@"Special Attack"] += (level * 5);
[self.stats objectForKey:@"Special Defense"] += (level * 5);
[self.stats objectForKey:@"HP"] += (level * 5);
}
error Estoy consiguiendo
Arithmetic on pointer to interface 'id', which is not a constant size in non-fragile ABI
S o me parece obvio que la razón por la que recibo el problema es porque obtengo un objeto devuelto por objectForKey en lugar de un entero. Así que traté de hacer el método intValue en el objeto que estoy recibiendo, pero eso me dio otro error, en concreto:
Assigning to 'readonly' return result of an objective-c message not allowed
estoy fuera de ideas sobre cómo solucionar este problema. ¿Alguna ayuda? ¿Sería mejor renunciar a la idea de almacenarlos todos juntos y simplemente usar una propiedad int para cada estadística?
No tengo que preocuparme por conservar si uso ARC ¿verdad? También tienes razón esto parece un poco tedioso ... tal vez voy a probar una clase en su lugar. – CaldwellYSR
@ CaldwellYSR Sí, tienes razón; no tienes que preocuparte por 'retener' si estás usando ARC. – trojanfoe
Gracias por el consejo, no sé por qué no pensé en convertirlos en una clase de todos modos. Hará que muchas cosas sean más fáciles a largo plazo. – CaldwellYSR