5

我有一个UIDocumentInteractionController实例(在我的课堂上确实有很强的参考,我知道关于它的内存问题),我想将照片文件发送到 Instagram。

我使用扩展名保存了文件ig(也尝试igo过),我正在展示控制器。Instagram 显示在列表中。我点击 Instagram,什么也没有发生。

NSURL *imageFile = [NSURL fileURLWithPath:path];
interactionController = [UIDocumentInteractionController interactionControllerWithURL:imageFile];
interactionController.UTI = @"com.instagram.photo";
interactionController.annotation = [NSDictionary dictionaryWithObject:@"my caption" forKey:@"InstagramCaption"];
interactionController.delegate = self;
[interactionController presentOpenInMenuFromRect:self.view.frame inView:self.view animated:YES];

为了进一步调查,我将调用类设置为委托并实现了willBeginSendingToApplication:anddidEndSendingToApplication:方法。有趣的是,我意识到willBeginSendingToApplication:确实会被调用,但didEndSendingToApplication:不会。我尝试更改文件扩展名,将 UTI 更改为com.instagram.exclusivegram,检查文件 URL 是否正确等,但它们似乎都不起作用。没有错误,控制台中没有任何内容。交互控制器关闭,我的应用程序继续像以前一样工作,但什么也没发生。我读过 iOS 6 上可能存在一些问题,但我的应用程序是 iOS 6 应用程序,所以我无法在 iOS < 6 上对其进行测试。我发现的唯一与我的问题接近的是UIDocumentInteractionController,没有文件扩展名,但 UTI,但它过多地潜入低级位,我也没有非 ARC 代码。

问题的原因可能是什么?

4

3 回答 3

6

如果文件不存在,但如果您没有正确构建文件 URL,则可能会发生这种情况。这困扰了我一段时间。

确保像这样构建文件 URL:

NSURL *pagesURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"MyGreatPDF.pdf" ofType:nil]];

而不是这样:

NSURL *pagesURL = [NSURL fileURLWithPath:@"MyGreatPDF.pdf"];

后者仍然形成一个有效的 URL,但它得到一个“私有”前缀,即file:///private/var/mobile/Applications/00000000-0000-0000-0000-000000000000/MyGreatApp.app/MyGreatPDF.pdf而不是file:///var/mobile/Applications/00000000-0000-0000-0000-000000000000/MyGreatApp.app/MyGreatPDF.pdf

于 2014-03-20T08:59:43.320 回答
1

过了半天,我发现文件没有正确保存,不存在。iOS 并没有抛出任何类型的错误,而是默默地失败了。我已经更正了关于生成文件的代码,当文件在那里时,控制器出现了。也许苹果应该添加一些断言/异常机制来处理文档交互控制器中不存在的文件。

于 2013-08-06T22:21:39.343 回答
0

这也可能是由文件名的扩展名引起的。

如果目标应用程序在Info.plist -> Exported Type UTIs -> Equivalent Types -> public.filename-extension中声明它仅支持具有png扩展名的文件,并且您发送一个具有jpg扩展名的文件,则目标应用程序不会以出色地。

于 2016-04-11T02:55:42.170 回答