2012-04-12 25 views
10

Estoy tratando de abrir un documento administrado usando openWithCompletionHandler:UIDocument openWithCompletionHandler no completar el dispositivo IOS

El problema que estoy llegando al otro lado es que funciona muy bien en el simulador, pero cuando lo pruebo en mi iPhone 4 de la terminación controlador nunca termina. El código es el siguiente:

[theManagedDocument openWithCompletionHandler:^(BOOL success){ 
    if(success) [self documentIsReady]; 
    if(!success) NSLog(@"Couldn't Open Document"); 
}]; 

Esto funciona bien en el simulador y llego a la llamada documentIsReady (o el "No se pudo abrir documento" si él los errores). Pero en el iPhone 4 nunca ejecuta el bloque CompletionHandler. He puesto puntos de ruptura a lo largo del bloque (antes y después de ambas sentencias if) y no se llama a nada. No "No se pudo abrir el documento" en la consola, no llame al documentIsReady.

También debo mencionar que parece que la primera vez que ejecuto la aplicación en el iPhone funcionará correctamente. También tengo esto encapsulado en una instrucción if con una llamada fileExistsAtPath:. Se está metiendo bien en la instrucción if y llamando al openWithCompletionHandler:, pero el bloque de finalización simplemente nunca se dispara.

Estoy usando iOS 5.1 y Xcode 4.3.2.

Respuesta

7

En mi caso, apagar mi iPad y reiniciarlo "solucionó" este problema. ¡Buena suerte!

+1

Limpié la aplicación, reinicié todo y parece estar mejorando. Un poco más de trabajo que esta respuesta, pero esto es lo suficientemente cerca. Todavía no estoy seguro de lo que lo estaba causando. –

+1

Es extraño la frecuencia con la que el reinicio de su dispositivo corrige errores. – Anton

2

Intente comprobar que theManagedDocument! = Nil antes de la llamada: esa es la única razón por la que puedo pensar por qué no se ejecutará el bloque.

8

He experimentado el mismo problema en mis aplicaciones que usan iCloud para compartir datos. Me di cuenta de que openWithCompletionHandler: solo espera y nunca llama al controlador de finalización si una aplicación suspendida deja el documento abierto. Si ese es su caso, debe asegurarse de cerrar el documento cuando su aplicación quede en segundo plano.

+0

También he experimentado esencialmente el mismo comportamiento si olvido liberar mi instancia de clase UIDocument personalizada desde el controlador de finalización. Simplemente permanece abierto y se bloqueará la segunda vez que intento llamar a openWithCompletionHandler. – vargonian

+0

@vargonian Eso tendría sentido ... excepto que este problema también ocurre con ARC (que maneja la memoria). –

0

Otra razón por la cual success podría ser falso es que usted modificó su modelo (agregó una propiedad a una entidad, por ejemplo) pero no eliminó la aplicación del simulador/dispositivo para actualizar el modelo.

+0

posiblemente, pero no estaba obteniendo 'success' como falso. No recibí nada devuelto en absoluto. –

Cuestiones relacionadas