Swift crash wen tapping "Открыть в Instagram" при использовании UIDocumentInteractionController

У меня есть код ниже для обмена изображениями на instagram из моего приложения Swift: @IBAction func instagramShareButton (отправитель: AnyObject) {

    let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
    let path = documentsDirectory.stringByAppendingPathComponent("Share Icon.igo")

    let imageName: String = "Share Icon.png"
    let image = UIImage(named: imageName)
    let data = UIImagePNGRepresentation(image!)

    data!.writeToFile(path, atomically: true)

    let imagePath = documentsDirectory.stringByAppendingPathComponent("Share Icon.igo")
    let rect = CGRectMake(0, 0, 0, 0)

    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0)
    self.view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
    UIGraphicsEndImageContext()

    let fileURL = NSURL(fileURLWithPath: imagePath)
    print("fileURL = \(fileURL)")

    var interactionController = UIDocumentInteractionController(URL: fileURL)

    interactionController.delegate = self

    interactionController.UTI = "com.instagram.exclusivegram"

    let msgBody = "My message"
    interactionController.annotation = NSDictionary(object: msgBody, forKey: "InstagramCaption")
    interactionController.presentOpenInMenuFromRect(rect, inView: self.view, animated: true)
}

func documentInteractionControllerWillPresentOpenInMenu (контроллер: UIDocumentInteractionController) {      }

Код переводится с Objective C на Swift мной, поскольку я ничего не нашел в Swift для совместного использования на Instagram.

Появится меню, я вижу там instagram, и когда я коснусь его, я получаю следующую ошибку:

Ошибка подтверждения в - [_UIOpenWithAppActivity performActivity], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3505.16/UIDocumentInteractionController.m:408

*** Завершение приложения из-за неперехваченного исключения "NSInternalInconsistencyException", причина: 'UIDocumentInteractionController ушел преждевременно!'

Я считаю, что мне как-то придется освободить объект UIDocumentInteractionController. Я прав? Не нашли никакой информации, чтобы помочь мне понять, как я могу это сделать в Swift. Пожалуйста, помогите мне разобраться, как я могу это решить.

Ответы

Ответ 1

Я думаю, что ты прав. У меня такая же проблема.

прежде чем запускать функцию общего доступа, вы должны создать глобальную переменную из UIDocumentInteractionController:

var interactionController: UIDocumentInteractionController?
@IBAction func instagramShareButton(sender: AnyObject) {
    ...
    interactionController = UIDocumentInteractionController(URL: fileURL)
    interactionController!.UTI = "com.instagram.exclusivegram"
    let msgBody = "My message"
    interactionController!.annotation = NSDictionary(object: msgBody, forKey: "InstagramCaption")
    interactionController!.presentOpenInMenuFromRect(rect, inView: self.view, animated: true)
}

Это работает для меня!