Domanda

penso che non finisco di capire tutto di memoria e quella roba, ma questo è il mio problema:

Ho una variabile definita idActual su una visualizzazione che verrà spinto (var definito nella sua intestazione), posso leggere (NSLog (idActual)) e impostato a zero senza problemi. Ma quando ho cambiare il suo valore ottengo un errore CFString, che il suo doveva essere a causa di gestione della memoria male, ho provato questo:

Posso fare questo: nextView.idActual = nil;

non posso fare questo:

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, c sempre mi danno l'errore CFString: *** - [CFString isEqualToString:]: messaggio inviato ad esempio deallocato

È stato utile?

Soluzione

Sembra che il CFString (NSString) che è contenuta in nextView.idActual è già stato rilasciato quando si va a modificare il valore. Se è possibile inviare più del relativo codice, che avrebbe aiutato.

Sto indovinando che idActual è dichiarato come @property(nonatomic,retain). Quando si tenta di impostare un nuovo valore nel idActual, il metodo setter per la proprietà si chiama (E 'possibile che il setter è stata generata automaticamente). La prima cosa che il metodo setter sta facendo sta cercando di confrontare il valore vecchio e il nuovo valore -. E poi si blocca

Quando quel metodo setter tentativi di confrontare il nuovo valore per il vecchio valore, si corre nei guai perché il vecchio valore è già deallocata.

sta chiamando [nextView.idActual release] prima di assegnare questi nuovi valori? Se siete, commentare quella linea, e vedere se questo risolve il problema. Il metodo setter auto-generata rilascerà il vecchio valore per voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top