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:触发复制:和打印:使用选项菜单(而不是在菜单中打开)调用并拉出一个仅列出页面的菜单,但这仍然不起作用。

如何解决?

4

3 回答 3

51

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

这个 bug 没有出现在 iPhone 上,但在 iPad 上它给出了一个错误,因为 popover 架构的工作方式有点不同,它最终会在它被释放时尝试绘制它。这就是提醒我注意这个错误的原因。

于 2011-11-12T04:47:36.413 回答
16

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

@property (nonatomic, retain) UIDocumentInteractionController *docController;

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

于 2013-02-07T15:17:21.793 回答
-4

添加以下代码就足够了:

[interactionController retain];
于 2013-01-30T13:17:16.400 回答