EXC_BAD_ACCESS 使用 UIDocumentInteractionController 将图像发送到 Instagram

EXC_BAD_ACCESS using UIDocumentInteractionController to sent Image to Instagram

我正在使用此代码将图像(以及最终标题)发送到 Instagram:

@IBAction func sendToInstragramPressed(sender: AnyObject) {

  var image = imagePreview.image
  var imagePath = NSString(format: "%@", [NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)][0])

  var img: String = imagePath
  var clean: String = img.stringByReplacingOccurrencesOfString(
  "[\(\ \\"\)]",
  withString: "",
  options: .RegularExpressionSearch)
  clean = clean.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
  clean = clean + "/image.igo"
  imagePath = clean

  println("test2 \(imagePath)")

  NSFileManager.defaultManager().removeItemAtPath(imagePath, error: nil)
  UIImagePNGRepresentation(image).writeToFile(imagePath, atomically: true)

  var docController: UIDocumentInteractionController = UIDocumentInteractionController(URL: NSURL.fileURLWithPath(imagePath)!)
  docController.delegate = self

  /*var annotationDict: NSMutableDictionary = [:]
  annotationDict["Instagram Caption"] = "Instagram Caption"
  docController.annotation = annotationDict*/

  docController.UTI = "com.instagram.exclusivegram"
  docController.presentOpenInMenuFromRect(self.view.frame, inView: self.view, animated: true)
}

它显示了要触摸的 Instagram 图标。当我触摸它时,我一直在 AppDelegate 收到错误 EXC_BAD_ACCESS 但我终究无法弄清楚到底是什么导致了这个。我在 objective-c 中完成了完全相同的实现,没有问题。可能出了什么问题?

编辑

这是在我使用此代码块操作 imagePath 之前发生的:

var img: String = imagePath
var clean: String = img.stringByReplacingOccurrencesOfString(
  "[\(\ \\"\)]",
  withString: "",
  options: .RegularExpressionSearch)
clean = clean.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
clean = clean + "/image.igo"
imagePath = clean

啊哈!所以看起来好像我在方法中实例化 UIDocumentInteractionController,所以它被 ARC 丢弃了。使它成为一个 class 宽变量,并发挥了魅力

所以一定要在class中实例化,然后在方法中引用

即:

var docController: UIDocumentInteractionController!