UIDocumentInteractionController para abrir en el menú - No funciona

Implementé un UIDocumentInteractionController para enviar archivos a otras aplicaciones. El archivo es un archivo .txt.

Aquí está el código:

UIDocumentInteractionController *interactionController = [[UIDocumentInteractionController alloc] init];
[interactionController setURL:[NSURL fileURLWithPath:filePath]];
[interactionController setUTI:@"public.text"];
[interactionController setDelegate:self];
[interactionController presentOpenInMenuFromBarButtonItem:actionBarButtonItem animated:YES];

El menú se abre bien, mostrando aplicaciones como Pages, Dropbox, etc., como espero. Pero cuando toco uno de ellos, el menú Abrir en se cierra y no se realiza ninguna acción (el archivo no se envía y la aplicación de destino nunca se abre.

Intenté implementar los métodos delegados documentInteractionController: canPerformAction: y documentInteractionController: performAction: para activar copiar: e imprimir: llamadas usando el menú de opciones (a diferencia de abrir en el menú) y eso abrió un menú con solo Páginas en la lista, pero eso todavía no funcionó.

¿Cómo podría resolverse esto?

22

3 Respuestas

Encontré la respuesta, y es la gestión de la memoria. Creo el UIDocumentInteractionController y luego lo presento, pero no lo tengo como una variable de instancia. ARC lo desasigna antes de que tenga la oportunidad de hacer algo. Esto incluye enviar el documento a la aplicación externa.

Este error no apareció en el iPhone, pero en el iPad da un error porque la arquitectura del popover funciona de forma un poco diferente y termina intentando dibujarlo cuando se desasigna. Eso es lo que me alertó del error.

49
agregado
thnx Han pasado un par de horas. Pero olvídate del arco. muchas veces una vez más
agregado el autor Serg Shiyan, fuente
Esta es la respuesta para los proyectos ARC. Debe declarar una propiedad para UIDocumentInteractionController: @property (nonatomic, strong) UIDocumentInteractionController * docController;
agregado el autor tony.tc.leung, fuente
¡Gracias! He estado buscando en la pila durante mucho tiempo y finalmente encontré que esta respuesta me funciona.
agregado el autor huoxinbird, fuente

Este error también aparece en iPhone/iPod. Sólo establece:

@property (nonatomic, retain) UIDocumentInteractionController *docController;

y se conservará y el documento pasará a la nueva aplicación.

16
agregado

es suficiente para agregar el siguiente código:

[interactionController retain];
4
agregado