2010-10-08 13 views
9

Io lavoro nell'applicazione iPhone, sto selezionando un'immagine dalla libreria fotografica utilizzando il controllo UIImage picker, quindi la elabora e visualizzo l'immagine e l'output corrispondente utilizzando rispettivamente UIImageview e UITextview. Per alcune immagini funziona bene e per alcune delle immagini il programma si è bloccato e mentre si verifica questo con il punto di interruzione ricevo un messaggio come PROGRAMMA SEGNALE SEGNALE RICEVUTO. qualcuno può suggerirmi come gestire questo errore. Nota: per ogni immagine in uscita, l'ho controllata con il punto di interruzione. il mio codice di esempio è qui,Programma ricevuto segnale SIGABRT

Per visualizzare un'immagine:

CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 240.0f); 
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect]; 
[myImage setImage:img]; 
myImage.opaque = YES; // explicitly opaque for performance 
[self.view addSubview:myImage]; 
[myImage release]; 

Per visualizzare il testo:

CGRect frame = CGRectMake(0.0f, 250.0f, 320.0f,25.0f); 
UITextView * tmpTextView = [[UITextView alloc]initWithFrame:frame]; 
tmpTextView.text = [NSString stringWithFormat:@"%@%@",@"value: ", somevalue]; 
[self.view addSubview:tmpTextView]; 
[tmpTextView release]; 
+1

Potresti modificare il tuo post per avere il codice con l'evidenziazione della sintassi? – mathk

risposta

15

SIGABRT è sollevata dalla funzione abort(3). E 'impossibile dire esattamente cosa sta succedendo nel vostro programma senza ulteriori informazioni, ma le ragioni più comuni che abort() viene chiamato sono:

  • si sta inviando un messaggio a un oggetto Objective-C che non supporta/implementare quel messaggio. Ciò si traduce nel temuto errore "unrecognized selector sent to instance".
  • Hai un'affermazione fallita da qualche parte. Nelle build non di debug che definiscono la macro , la macro di libreria standard assert(3) chiama quando l'asserzione fallisce
  • Si verifica un errore di stomping/allocazione della memoria. Quando malloc/free rilevare un mucchio corrotto, la possono chiamare abort() (vedi, ad esempio, this question)
  • Stai lanciando un'eccezione non rilevata (sia un'eccezione C++ o un'eccezione Objective-C)

In quasi tutti In alcuni casi, la console di debug ti darà un po 'più di informazioni su cosa sta causando la chiamata di abort(), quindi dai un'occhiata qui.

+0

Grazie per la risposta. Ho risolto il problema. – Ashok

+7

@ashok: sarebbe molto utile se ci dite come avete risolto quell'errore. –

+1

Un buon modo per trovare parzialmente l'errore nella propria base di codice è di attivare un punto di interruzione di eccezione (o assicurarsi di non avere i punti di interruzione disattivati ​​:)). Questo ti mostrerà ad esempio esattamente quale delle tue affermazioni sta creando il problema. –

Problemi correlati