UIDocumentInteractionController用于“打开”菜单 - 无法工作

22

我实现了一个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等应用程序,但当我点击其中一个时,"在...中打开"菜单关闭后没有任何操作被执行(文件未发送且目标应用程序也未打开)。
我尝试实现委托方法documentInteractionController:canPerformAction:documentInteractionController:performAction: 触发使用选项菜单(而不是在菜单中打开)的复制和打印调用,并弹出了一个只列出Pages选项的菜单,但仍然无法工作。
如何解决这个问题?
3个回答

51

问题已找到,它与内存管理有关。我创建了UIDocumentInteractionController并展示它,但没有将其作为实例变量。自动引用计数(ARC)在它有机会执行任何操作之前对其进行了释放,这包括将文档发送到外部应用程序。

这个bug在iPhone上没有出现,但在iPad上会出错,因为弹出窗口的架构有点不同,并且它在被释放时仍然尝试绘制它。这就是让我意识到这个bug存在的原因。


谢谢!我在 Stack 上搜索了很长时间,最终找到了这个答案对我有用。 - huoxinbird
1
这是ARC项目的答案。您必须为UIDocumentInteractionController声明一个属性:@property(nonatomic, strong)UIDocumentInteractionController * docController; - tony.tc.leung
谢谢。我已经花了几个小时,但是忘记了弧度。再次感谢你。 - Serg Shiyan

16

这个故障在iPhone/iPod上也会出现。只需设置:

@property (nonatomic, retain) UIDocumentInteractionController *docController;

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


-4
只需要添加以下代码即可:

这就足够了:

[interactionController retain];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接