在“橡皮鸭调试”之后,这个回答了一堆,我终于在一个看起来与我无关的问题上找到了正确的答案。我认为这个问题(及其答案)仍然具有相关性,所以我发布了这个问题并发布了自己的答案,希望能帮助像我这样的人。
<小时/> 我正在我的iOS应用程序中创建一个PDF,我希望允许用户导出。出于此测试的目的,我正在尝试将其保存到物理设备上的个人Dropbox。
我打开了iTunes文件共享,我可以验证PDF文件是否正确生成,当我将其从我的设备(运行iOS 11的iPad Pro Gen. 2)复制时,我可以打开PDF和它具有预期的内容和外观。
我能够正确显示文档弹出窗口,并且我可以选择通过以下方式分享:
无论我尝试选择什么(保存到Dropbox是我想解决的问题,但问题似乎是普遍的),它失败了。值得注意的是,当我点击Save to Dropbox时,我执行会看到Dropbox面板显示,但是在Save to Dropbox模式的顶部会立即显示一个模式,显示“发生未知错误。” / p>
我试图环顾四周,看看如何获得有关此错误的更多信息,但我很难过。我不确定它是否相关,但我在控制台中收到此消息:
[AXRun-PID] Client requesting unsuspension of PID:813 Name:<redacted>
尝试谷歌这个错误证明是无效的。
这是我生成PDF并显示菜单的代码:
#pragma mark • Sharing Methods
- (void)showShareMenu {
NSArray *bookList = [BookManager bookList];
NSURL *pdfUrl = [PdfGenerator generatePdfFromBooks:bookList];
UIDocumentInteractionController *vc = [[UIDocumentInteractionController alloc] init];
vc.name = @"Booklet.pdf";
vc.URL = pdfUrl;
vc.UTI = @"com.adobe.pdf";
[vc presentOptionsMenuFromBarButtonItem:self.navigationItem.leftBarButtonItem animated:YES];
}
我尝试使用UIDocumentInteractionController *vc = [UIDocumentInteractionController interactionControllerWithURL:pdfUrl];
而不是上面的那个,但结果是一样的。
我尝试将self
委托给vc
,然后尝试实施以下方法:
- (void)documentInteractionController:(UIDocumentInteractionController *)controller
willBeginSendingToApplication:(nullable NSString *)application;
- (void)documentInteractionController:(UIDocumentInteractionController *)controller
didEndSendingToApplication:(nullable NSString *)application;
这两种方法都没有被解雇过。
有趣的是,虽然我认为我根据我读过的内容正确提供了文件名,但保存到Dropbox模式中File
教科书中的名称是当前时间戳(例如{{1} }})。 Dropbox模式保持不变,直到我在“未知错误发生”模式上单击“确定”,然后立即消失。
似乎我在某种程度上没有提供正确的信息,但我不确定如何。似乎应该有一个委托方法来向我指出错误,但我在文档中看不到类似的内容。 ( 晚了,我已经看了几个小时,包括阅读几个相关的教程,所以我可能错过了一些明显的东西。)
答案 0 :(得分:0)
在问及当前的问题时,我遇到this answer作为示例问题。
它并没有真正问我同样的问题,该用户也没有相同的错误输出。但是,相关的答案也对我有用。
我在上面的代码中遇到的问题是我在创建它之后没有保留UIDocumentInteractionController
。添加私有属性修复了此问题。因此,以下代码现在可以使用:
#pragma mark • Sharing Methods
- (void)showShareMenu {
NSArray *bookList = [BookManager bookList];
NSURL *pdfUrl = [PdfGenerator generatePdfFromBooks:bookList];
self.docController = [UIDocumentInteractionController interactionControllerWithURL:pdfUrl];
self.docController.name = @"Booklet.pdf";
self.docController.UTI = @"com.adobe.pdf";
[self.docController presentOptionsMenuFromBarButtonItem:self.navigationItem.leftBarButtonItem animated:YES];
}