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!
我正在使用此代码将图像(以及最终标题)发送到 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!