12

我正在尝试使用 UIDocumentInteractionController OpenIn 菜单将在我的应用程序中生成的图像发送到其他应用程序。我正在使用以下代码将 UIImage 保存到磁盘:

    fileJpeg = [NSTemporaryDirectory() stringByAppendingPathComponent:@"activeImage.jpg"];
    jpegFileURL = [NSURL fileURLWithPath:fileJpeg];

    UIImage *imageToWrite = image;

    [UIImageJPEGRepresentation(imageToWrite, 1.0) writeToFile:fileJpeg atomically:YES];

我正在以另一种方法访问 jpegFileURL 以使用 MFMailComposeViewController 通过电子邮件发送图像,并且它运行良好,因此 NSURL 是有效的。但是当我尝试将图像发送到另一个应用程序(只是发送,我没有实现任何预览功能)时,应用程序崩溃了。这是方法:

- (IBAction)openInOtherApp:(id)sender{

UIDocumentInteractionController *controller = [UIDocumentInteractionController interactionControllerWithURL: jpegFileURL];
controller.delegate = self;
CGRect rect = self.view.frame;
[controller presentOpenInMenuFromRect:rect inView:self.view animated:YES];
}

显示“打开方式”菜单。当我点击任何可用应用程序的按钮时,它会崩溃。在 iOS6 (6.0.1) 和 iOS5 (5.1.1) 设备中进行测试时,我在控制台中没有收到错误输出(只是通常的 EXC_BAD_ACCESS (code=1, address... crash),但是在 iOS 4.3 设备上(The应用程序向上兼容 4.3)我在控制台中收到此错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType actionSheet:clickedButtonAtIndex:]: unrecognized selector sent to instance 0x16b7f0'

我一直在阅读 Apple 关于 UIDocumentInteractionController 和 UIDocumentInteractionControllerDelegate 的文档,这些文档是我在我的类 @interface 中实现的,但似乎不需要任何可选的委托方法来满足我的需要或在这次崩溃中有所帮助。

无法弄清楚什么是错的或缺少的。任何帮助,将不胜感激。

4

3 回答 3

35

找到问题了,感谢这个答案。这是一个记忆的事情。我使用 UIDocumentInteractionController 作为本地实例变量,ARC 很快就会发布它。把它变成一个类属性,现在一切正常。

于 2012-11-15T21:40:22.043 回答
2

您必须在 @interface 之后在 .h 文件中定义 UIDocumentInteractionController *controller ... 就像

@interface sampleView <UIDocumentInteractionControllerDelegate>
{
    UIDocumentInteractionController *controller;
}

应用程序需要从整个模块访问这个变量,而不仅仅是在它调用的过程中。

于 2015-05-11T13:37:20.293 回答
0

请注意,如果您使用远程 PDF 网址,应用程序会崩溃!将远程 URL 保存到本地目录路径中。并将该 url 指向文档交互控制器。此处保存到本地目录的 Swift 代码示例。

let data = try Data(contentsOf: self.pdfUrl)
// Create a local file url path with intermediate folders created.     
let fileUrl = Utils.cachesDirectoryPath(appendingComp: self.filePath, ext: "pdf")
try data.write(to: fileUrl)
// Provide this URL into DocumentInteractionController
self.fileUrl = fileUrl
于 2020-01-24T02:25:00.210 回答