2009-12-04 16 views
5

Ho un'app per iPhone. Sembra funzionare bene. Quando mi collego a un iphone fornito su Xcode ed eseguo l'app, il log della console nella finestra Organizer, si lamenta sempre di un errore di segmentazione quando si esce dall'app con la chiave di casa.Segnale 11, errore di segmentazione su iphone App exit

Qualcun altro ha visto questo, e hai un'idea di quale potrebbe essere il problema? Uso un thread per caricare pagine Web nel backround, ma interrompo il thread quando esco.

La mia app salva alcune informazioni persistenti. Quando uso la funzione di compilazione e analisi ottengo 2 potenziali perdite di memoria, ma in ogni caso sto allocando un oggetto e conservandolo in una matrice.

Qualche idea o è normale?

+1

NSZombieEnabled mi ha davvero aiutato a trovare un incidente che non riuscivo a trovare prima. – BastiBen

risposta

7

Prova a eseguire l'applicazione con NSZombieEnabled. Questo ti dirà se stai rilasciando qualsiasi oggetto. Per abilitare zombie effettuare le seguenti operazioni:

  1. Choose Project > Edit Active Executable to open the executable Info window.
  2. Click Arguments.
  3. Click the add (+) button in the “Variables to be set in the environment” section.
  4. Enter NSZombieEnabled in the Name column and YES in the Value column.
  5. Make sure that the checkmark forthe NSZombieEnabled entry is selected.
+0

Con NSZombieEnabled, dove dovrei impostare un punto di interruzione per rilevare il problema? Con questa impostazione, il programma me termina precocemente con il messaggio: CFString autorelease: messaggio inviato all'istanza deallocata. Mi piacerebbe interrompere quando il messaggio viene inviato a una stringa rilasciata, così posso capire quale stringa. Grazie, Gerry – Gerry

+0

Con gli zombi abilitati. Il mio codice fallisce all'interno della riga [parser parse] dal codice sottostante. Questo bit si verifica su un NSThread. Qualche idea su cosa potrebbe causare un problema. La mia routine foundCharacters non viene colpita. Grazie, Gerry (codice nel commento successivo) – Gerry

+0

NSURL * nsurl = [NSURL URLWithString: query]; \t NSURLRequest * request = [NSURLRequest requestWithURL: nsurl]; \t \t data = [NSURLConnection sendSynchronousRequest: request returningResponse: & response error: & error]; \t \t NSXMLParser * parser = [[NSXMLParser alloc] initWithData: data]; \t [parser setDelegate: self]; \t [parser setShouldProcessNamespaces: NO]; \t [parser setShouldReportNamespacePrefixes: NO]; \t [parser setShouldResolveExternalEntities: NO]; \t errorStr = nil; \t if ([parser parse] == YES) // materiale – Gerry

0

All'uscita l'applicazione può sovrascrivere un oggetto provare a scaricare ogni oggetto prima di rilasciarlo o eseguire un debug nel metodo dealloc.

0

Forse stai rilasciando qualche oggetto più volte del suo conteggio. Commenta le chiamate -release nei tuoi metodi dealloc (o altrove) finché non trovi il colpevole.

Quindi disconnettersi da quella chiamata e cercare altrove nel codice in cui si sta tentando di sovrascrivere tale oggetto.

Se si utilizzano metodi di convenienza, per esempio, (ad esempio [NSString stringWithFormat:@"..."]) rispetto al alloc-init metodi (per esempio [[NSString alloc] initWithFormat:@"..."]) l'oggetto convenienza risultante viene autoreleased e non deve essere sbloccato manualmente.

0

Il mio problema era uididfaker e locationholic da Cydia, e dopo la disinstallazione di loro corsa Xcode sul mio iphone bene.

Problemi correlati