El manejador de finalización de iOS 7 nunca se llama.

En el siguiente código ninguno de los manejadores de finalización alguna vez se ejecuta. La única explicación que pude encontrar es este Bug en iPhone Simulator 5.1 con Xcode 4.5 usando UIManagedDocument . Dice que podría ser un error en iPhone simulator 5.1. Sin embargo, he probado los simuladores de iPhone 6.0, 6.1 y 7.0, ninguno funcionó. Apreciaré tu ayuda.

(Por cierto, he visto este código en el curso iOS de Stanford, conferencia 14)

NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; url = [url URLByAppendingPathComponent:@"DataDocument"]; UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:url]; if(![[NSFileManager defaultManager] fileExistsAtPath:[url path]]){ NSLog(@"This logs"); [document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){ NSLog(@"This never logs"); }]; }else if(document.documentState == UIDocumentStateClosed){ NSLog(@"This logs"); [document openWithCompletionHandler:^(BOOL success){ NSLog(@"This never logs"); }]; }else{ //I have a separate log for this, but it's never 'else' } 

EDIT: He encontrado una pregunta que parece estar tratando exactamente con el mismo problema. No puedo get un nsmanageobjectcontext . Simplemente lo fijé en el manejador de finalización que no se ejecuta.

EDIT: Descubrí cuál era el problema: porque openWithCompletionHandler se ejecuta de forma asíncrona, mi aplicación intentará usar el documento antes de que termine de abrirse. El uso de un bucle de ejecución resolvió el problema. Ejemplo a continuación.

 if(doc.documentState == UIDocumentStateClosed){ NSLog(@"This logs"); __block BOOL waitingOnCompletionHandler = YES; [doc openWithCompletionHandler:^(BOOL success){ NSLog(@"This logs too!"); }]; while (waitingOnCompletionHandler) { NSDate *futureTime = [NSDate dateWithTimeIntervalSinceNow:0.1]; [[NSRunLoop currentRunLoop] runUntilDate:futureTime]; } }