我实现了一个UIDocumentInteractionController来将文件发送到其他应用程序。该文件是.txt文件。
以下是代码:
UIDocumentInteractionController *interactionController = [[UIDocumentInteractionController alloc] init];
[interactionController setURL:[NSURL fileURLWithPath:filePath]];
[interactionController setUTI:@"public.text"];
[interactionController setDelegate:self];
[interactionController presentOpenInMenuFromBarButtonItem:actionBarButtonItem animated:YES];
菜单打开正常,可以显示像Pages,Dropbox等应用程序。但是当我点击其中一个时,Open In菜单会解散并且不执行任何操作(文件不会被发送,目标应用程序也不会打开。
我尝试实现委托方法documentInteractionController:canPerformAction:
和documentInteractionController:performAction:
来触发copy:和print:使用选项菜单进行调用(而不是菜单中的打开)并且只启动了一个只有Pages的菜单列出,但仍然无效。
如何解决这个问题?
答案 0 :(得分:49)
我找到了答案,这是内存管理。我创建了UIDocumentInteractionController然后呈现它,但我没有它作为实例变量。 ARC在它有机会做任何事情之前解除它。这包括将文档发送到外部应用程序。
这个错误没有出现在iPhone上,但在iPad上却出现错误,因为popover架构的工作方式略有不同,最终会在取消分配时尝试绘制它。这就是提醒我这个错误的原因。
答案 1 :(得分:16)
此错误也会出现在iPhone / iPod上。只需设置:
@property (nonatomic, retain) UIDocumentInteractionController *docController;
它将被保留,文档将传递给新的应用程序。
答案 2 :(得分:-4)
足以添加以下代码:
[interactionController retain];