2012-09-13 29 views
18

Recientemente envié una aplicación a App Store que aún no se ha aceptado. Mientras tanto, descargué Xcode 4.5 y probé mi aplicación en el simulador de iPhone 6.0.UIAlertView causa bloqueo en iOS SDK 6.0

Sin embargo, cuando intento mostrar un UIAlertView, la aplicación se bloquea en la línea [myAlertView show] con el error EXC_BAD_ACCESS. Funciona bien con iPhone 5.1 Simulator.

Aquí está mi código:

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

¿Eso es normal? ¿Qué estoy haciendo mal con mi código?

Además, ¿cree que debería volver a enviar mi aplicación a Apple? (Sólo pidiendo su consejo)

Gracias de antemano.

Editar: Apple ha rechazado la aplicación debido a un bloqueo de iOS 6.

+1

¿Has probado un proyecto limpio y fresco acumulación? ¿Está mostrando la vista de alerta de un hilo que no sea el hilo principal donde debe residir todo el código de UI o podría colapsar inesperadamente? – Levi

+0

Mostrando en un hilo ... ¿Es por eso? ¿Por qué no sucede en 5.1? – kubilay

+0

@confeng Si llama a este código desde un hilo que no sea el hilo principal, sí, es más probable por qué se bloquea. De lo contrario, el código está bien. – JustSid

Respuesta

20

Ver esta pregunta relacionada: UIAlertView shown from background thread and with no delegate creates EXC_BAD_ACCESS

entrada del usuario y la interfaz de usuario llamadas deben venir desde el hilo principal. Muchos de ellos trabajarán "la mayoría" del tiempo en otros hilos, pero a veces se bloqueará. Es más probable que fallen de forma diferente (más o menos a menudo) en un dispositivo que en el simulador, pero es posible que Apple haya realizado cambios que afecten esa diferencia en iOS6.

Y a su segunda pregunta, le respondería que sí, subiría un binario actualizado para su revisión en cuanto solucione el problema, especialmente si puede reproducirlo en un dispositivo (le recomiendo que intente reproducirlo) en un dispositivo). De lo contrario, puede A) ser aceptado con un error que sus usuarios odian, o B) ser rechazado y tener un retraso aún mayor y posiblemente más escrutinio. Si envía un binario actualizado antes de que finalice la revisión, lo pone al final de la línea AFAIK, pero es mejor que las alternativas.

27

Eliminar este método y utilizar el otro método:

[myAlertView show]; 

probar este método:

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

funciona para mí, gracias por eso –

+0

Esto funciona, pero el problema que tengo es cuando el usuario hace clic en Aceptar, la alerta desaparece, bueno, pero sigue siendo el fondo descolorido que aún aparece, pero se desvanece cuando el usuario clics en algún lugar de la vista principal que muestra la vista de alerta ..... ¿Alguna idea? ¿Como un [alerta ocultar] después de que el usuario haga clic en Aceptar en la vista de alerta? – jsetting32

+0

Funciona bien ... * solo si la actividad actual no está en el hilo principal :-) –

Cuestiones relacionadas