Puede establecerse en nulo pero no en una cosa diferente
-
26-10-2019 - |
Pregunta
Creo que no termino para entender todo sobre la memoria y esas cosas, pero este es mi problema:
Tengo un idacual definido por variable en una vista que será presionada (VAR definida en su encabezado), puedo leer (NSLOG (IdActual)) y configurarlo en nulo sin problemas. Pero cuando cambio su valor obtengo un error de CFString, que se supone que debe ser debido a la mala gestión de la memoria, he intentado esto:
Puedo hacer esto: nextView.idactual = nil;
No puedo hacer esto:
a) nextView.idActual = @"1";
b) NSString *str = [NSString stringWithFormat:@"1"];
nextView.idActual = str;
c) NSString *str = [[NSString alloc] initWithFormat:@"1"];
nextView.idActual = str;
[str release];
A, B y C siempre dame el error de CFString: *** -[CFString isEqualToString:]: Mensaje enviado a la instancia de distribución
Solución
Parece que el cfstring (nsstring) que está contenido en nextView.idActual
ya se ha lanzado cuando vas a cambiar el valor. Si puede publicar más del código relacionado, eso ayudaría.
Supongo que eso idActual
se declara como @property(nonatomic,retain)
. Cuando intentas establecer un nuevo valor en idActual
, se llama el método Setter para esa propiedad (es posible que el setter se genere automáticamente). Lo primero que es hacer el método Setter es tratar de comparar el valor anterior y el nuevo valor, y luego se bloquea.
Cuando ese método de setter intenta comparar el nuevo valor con el valor anterior, se encuentra en problemas porque el valor anterior ya está desacalitado.
Estás llamando [nextView.idActual release]
antes de asignar estos nuevos valores? Si es así, comente esa línea y vea si eso soluciona su problema. El método Setter generado automáticamente liberará el valor anterior para usted.