ios ios8 uiactivityviewcontroller uiactivity completion-block

ios 8 bloque de finalización no llamado



ios8 uiactivityviewcontroller (1)

En iOS 8, cuando toca "Abrir en", UIActivityViewController se cierra automáticamente. Por lo tanto, cuando llame a self.superViewController dismissViewControllerAnimated:completion: viewController ya se ha descartado y el método no hace nada (por lo que no se realiza la finalización).

En mi aplicación, estoy usando TTOpenInAppActivity para insertar la acción "Abrir en" dentro de UIActivityController. En su interior funciona así:

Algunos controladores de vista presentan UIActivityController con TTOpenInActivity ya integrado.

-(void)openWithAction { NSURL *fileURL = SOME_URL; CGRect rect = SOME_RECT; TTOpenInAppActivity *openInAppActivity = [[TTOpenInAppActivity alloc] initWithView:self.view andRect:rect]; UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[fileURL] applicationActivities:@[openInAppActivity]]; if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ // Store reference to superview (UIActionSheet) to allow dismissal openInAppActivity.superViewController = activityViewController; // Show UIActivityViewController [self presentViewController:activityViewController animated:YES completion:NULL]; } else { // code for iPad, irrelevant } }

Cuando el usuario toca el botón "Abrir en", se activa el siguiente método:

- (void)performActivity { if(!self.superViewController){ [self activityDidFinish:YES]; return; } // Dismiss activity view if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ // iPhone dismiss UIActivityViewController [self.superViewController dismissViewControllerAnimated:YES completion:^(void){ if (self.fileURLs.count > 1) { [self openSelectFileActionSheet]; } else { // Open UIDocumentInteractionController [self openDocumentInteractionControllerWithFileURL:self.fileURLs.lastObject]; } }]; } else { // code for iPad, irrelevant } } }

Como la aplicación es solo para iPhone, este fragmento de código debe ejecutarse:

[self.superViewController dismissViewControllerAnimated:YES completion:^(void){ if (self.fileURLs.count > 1) { [self openSelectFileActionSheet]; } else { // Open UIDocumentInteractionController [self openDocumentInteractionControllerWithFileURL:self.fileURLs.lastObject]; } }];

En iOS7 todo funciona bien. En iOS8 UIActivityController se descarta y luego no pasa nada. Durante la depuración logré detectar que en el controlador de finalización iOS8 nunca se llama.

Por favor, ayúdame a descubrir la razón de este comportamiento y haz que funcione como debería.

Gracias de antemano.