iOS UIDocumentInteractionController LaunchServices:invalidationHandler被调用

时间:2015-03-15 20:23:23

标签: ios swift uidocumentinteraction

当我尝试从我的应用中启动Instagram时,我遇到了问题。一切正常,我能够启动IG,甚至可以看到我发送的照片等。

问题是UIDocumentInteractionController正在崩溃我的应用。是的,我做了我的研究。

我已经看到帖子LIKE THIS表明这是一个Apple bug,只要你可以修复崩溃,你应该可以正常并忽略Launch Services消息。

问题是我仍然遇到崩溃,并试图弄清楚如何解决它。

我在发表ViewController HERE后发现了一篇关于添加IF-STATEMENT的帖子,这篇文章是用Objective-C编写的,而且这个例子不适用于UIDocumentInteractionController

我试图在Swift中对它进行一次攻击,但它仍然不适合我。如果有人可以提供帮助,我将不胜感激。

dic = UIDocumentInteractionController(URL: imageURL!)
dic.delegate = self

var annotationDictionary: [String: String] = ["InstagramCaption": "Test"]
dic.annotation = annotationDictionary
dic.UTI = "com.instagram.exclusivegram"

dic.presentOpenInMenuFromRect(CGRectMake(1, 1, 1, 1), inView: self.view, animated: true)

if dic.respondsToSelector("popoverPresentationController") {

    Scripts.log("InstagramVC Did Respond to popoverPresentationController")     
    var popoverController: UIPopoverPresentationController = self.popoverPresentationController!        
    popoverPresentationController?.sourceView = self.view       
}

3 个答案:

答案 0 :(得分:2)

我的修复是将UIDocumentInteractionController变量声明为viewcontroller类的一部分,而不是在我设置注释和UTI并调用.presentOpenInMenuFromRect

的同一函数中创建它。

所以我在类的顶部靠近任何函数,我声明了变量:

var docController = UIDocumentInteractionController()

然后当我准备好使用它时,我配置了现有UIDocumentInteractionController的所有内容而不是创建一个:

docController = UIDocumentInteractionController(URL: imageURL!)
docController.UTI = "com.instagram.exclusivegram"
docController.delegate = self
docController.annotation = ["InstagramCaption":"Text"]

docController.presentOpenInMenuFromRect(rect, inView: self.view, animated: true)

应用程序停止崩溃,Instagram现在加载了分配的图像/文本。

我在这里找到了引导我解决问题的建议:https://stackoverflow.com/a/16057399/428981然后适应Swift

答案 1 :(得分:1)

听起来你的UIDocumentInteractionController实例超出了范围。尝试将其作为该类的属性或其他方式来保留它。

答案 2 :(得分:0)

我遇到了同样的问题:将图片发送到Instagram工作但是瞬间崩溃了我的应用程序。我认为这与一旦另一个应用程序打开后系统如何处理UIDocumentInteractionController有关。如果您尝试通过嵌入式Facebook或Twitter框架发送图片,在您的应用程序顶部打开一个弹出窗口,则不会发生崩溃......

无论如何,我最终使它工作的方式是不将我的viewController声明为委托,所以:

// dic.delegate = self

缺点是你不能使用任何委托方法。就我而言,无论如何我都没有使用它们。