用于打开菜单的UIDocumentInteractionController - 不起作用

时间:2011-11-12 02:51:34

标签: ios ios5 uidocumentinteraction

我实现了一个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的菜单列出,但仍然无效。

如何解决这个问题?

3 个答案:

答案 0 :(得分:49)

我找到了答案,这是内存管理。我创建了UIDocumentInteractionController然后呈现它,但我没有它作为实例变量。 ARC在它有机会做任何事情之前解除它。这包括将文档发送到外部应用程序。

这个错误没有出现在iPhone上,但在iPad上却出现错误,因为popover架构的工作方式略有不同,最终会在取消分配时尝试绘制它。这就是提醒我这个错误的原因。

答案 1 :(得分:16)

此错误也会出现在iPhone / iPod上。只需设置:

@property (nonatomic, retain) UIDocumentInteractionController *docController;

它将被保留,文档将传递给新的应用程序。

答案 2 :(得分:-4)

足以添加以下代码:

[interactionController retain];