2012-09-13 3 views
18

recente ho presentato un app per App Store che non è stato ancora accettato. Nel frattempo, ho scaricato Xcode 4.5 e testato la mia app in iPhone 6.0 Simulator.UIAlertView causa l'arresto in iOS SDK 6.0

Tuttavia, quando intendo mostrare uno UIAlertView, l'app si arresta in modo anomalo sulla riga [myAlertView show] con errore EXC_BAD_ACCESS. Funziona perfettamente con iPhone 5.1 Simulator.

Ecco il mio codice:

UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Are you sure?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; 
[myAlertView show]; 

È normale? Cosa sto sbagliando con il mio codice?

Inoltre, pensi che dovrei inviare nuovamente la mia app per Apple? (Basta chiedere il vostro consiglio)

Grazie in anticipo.

Edit: Apple ha respinto l'applicazione a causa di iOS 6 crash.

+1

Hai provato un progetto di generazione pulita e fresca? Stai visualizzando la visualizzazione di avviso da un thread diverso dal thread principale in cui deve trovarsi il codice ALL UI o potrebbe bloccarsi in modo imprevisto? – Levi

+0

Mostrando su una discussione ... È per questo? Perché non succede in 5.1? – kubilay

+0

@confeng Se si chiama questo codice da un thread diverso dal mainthread, sì, che è più probabile che il motivo per cui si blocca. Altrimenti il ​​codice va bene. – JustSid

risposta

20

Vedere questa domanda correlata: chiamate UIAlertView shown from background thread and with no delegate creates EXC_BAD_ACCESS

input dell'utente e UI devono provenire dal thread principale. Molti di questi funzioneranno "la maggior parte" del tempo su altri thread, ma a volte andranno in crash. Essi sono più probabilità di crash in modo diverso (più o meno spesso) su un dispositivo che il simulatore, ma è possibile Apple ha fatto modifiche che interessano tale differenza di iOS6.

E alla tua seconda domanda, risponderei sì, caricherò un file binario aggiornato per la revisione non appena avrai risolto il problema, specialmente se riesci a riprodurlo su un dispositivo (ti incoraggio vivamente a tentare di riprodurlo su un dispositivo). Altrimenti, potresti A) essere accettato con un bug che i tuoi utenti odiano, o B) essere respinto e avere un ritardo ancora più lungo e forse più controllo. Se invii un file binario aggiornato prima che la recensione finisca, ti metti nella "parte posteriore della linea" AFAIK, ma meglio delle alternative.

27

Cancella questo metodo e utilizzare l'altro metodo:

[myAlertView show]; 

provare questo metodo:

[myAlertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES]; 
+0

funziona per me, grazie per questo –

+0

Questo funziona, ma il problema che sto avendo è quando l'utente fa clic va bene, l'avviso va via - buono, ma la loro è ancora sbiadito sfondo che appare ancora, ma svanisce quando l'utente clicca da qualche parte nella vista principale che mostrava la segnalazione ... Qualche idea? Come un [avviso nascosto] dopo che l'utente fa clic su OK nella visualizzazione di avviso? – jsetting32

+0

Funziona bene ... * solo se l'attività corrente non è nel thread principale :-) –