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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top