Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIDocumentInteractionController for Open In menu - Doesn't Work

I implemented a UIDocumentInteractionController to send files to other apps. The file is a .txt file.

Here's the code:

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

The menu opens fine, showing apps like Pages, Dropbox, etc. as I expect. But when I tap one of them, the Open In menu dismisses and no action is performed (the file is not sent and the target application never opens.

I tried implementing the delegate methods documentInteractionController:canPerformAction: and documentInteractionController:performAction: for triggering copy: and print: calls using the options menu (as opposed to the open in menu) and that pulled up a menu with only Pages listed, but that still did not work.

How might this be resolved?

like image 780
Justin Mrkva Avatar asked Nov 12 '11 02:11

Justin Mrkva


2 Answers

I found the answer, and it's memory management. I create the UIDocumentInteractionController and then present it, but I don't have it as an instance variable. ARC deallocates it before it has the opportunity to do anything. This includes sending the document to the external app.

This bug didn't appear on the iPhone, but on the iPad it gives an error because the popover architecture works a bit differently and it ends up trying to draw it when it's deallocated. That's what alerted me to the bug.

like image 182
Justin Mrkva Avatar answered Nov 07 '22 04:11

Justin Mrkva


This bug also appears on iPhone/iPod. Just set:

@property (nonatomic, retain) UIDocumentInteractionController *docController;

and it will be retain and the document passed to the new application.

like image 45
rosaMerino Avatar answered Nov 07 '22 06:11

rosaMerino