Añadir pin en mapView no funciona en la versión de appstore

Envié mi aplicación y la acepté hace algunas semanas. Sin embargo, tengo un problema que una de mis funciones críticas que agrega pin no funciona, pero funciona en la versión de construcción. Agregar pin requiere connection URL. ¿Podrías ver la respuesta que obtengo del desarrollador de Apple y guiarme por favor?

No debe estar causando su problema (al less no directamente), pero en general tener un código de networking como este dentro de su código de interfaz de usuario es muy problemático por varias razones:

-En terrenos de architecture general, es una gran violación de la architecture MVC (controller de vista de model). La anotación de pin está obviamente muy vinculada a su interfaz de usuario (la vista), mientras que la networking es claramente parte de su backend (el model).

-Porque iOS REQUIERE que el hilo principal permanezca receptivo, adjuntar código que haga IO o computación al hilo principal es inherentemente arriesgado. Se puede hacer y funcionar bien, pero hacerlo incorrectamente inevitablemente provocará colisiones.

NSURLConnection funciona en segundo plano y las interacciones con la interfaz de usuario deberían ir en el hilo principal.

Por lo tanto, si agrega su pin al método connectionDidFinish, por ejemplo, debería hacer lo siguiente:

[mapView performSelectorOnMainThread:@selector(addAnnotation:) withObject:yourAnnotation waitUntilDone:[[NSThread currentThread] isMainThread]]; 

Espero que te ayude. Escribí desde Windows, pero la línea debería funcionar.

No estoy muy seguro de lo que estás tratando de lograr. ¿La gente de la aplicación se queja porque está buscando la URL directamente en el subprocess principal? ¿Podrías simplemente enviar un fragment de código que muestra cómo search urls?

Una opción sería soltar el pin (no está vinculado a la connection de URL en absoluto) y una vez que el pin cae, cargue sus datos para la llamada o la anotación (que es lo que estoy asumiendo que está haciendo). Siempre puede poner un indicador de carga o avanzar HUD para decirle al usuario que deben esperar algo. No es exactamente ideal, pero en los casos en que necesita esperar datos, ¿qué vas a hacer?

A Apple realmente no le importa bloquear la interfaz de usuario, siempre que el usuario sepa que la está bloqueando. Como una barra de progreso o avance HUD. El usuario puede ver que la aplicación sigue funcionando y haciendo algo. No mostrar nada y hacer que la UI se congele mientras espera que el hilo principal / bucle principal regrese no va a funcionar. Es un mal layout y es probable que Apple te esté engañando.