【发布时间】:2026-01-13 13:00:01
【问题描述】:
我基本上是在截取视图,将其保存到我的相机胶卷,获取 NSURL 路径并导出到 Whatsapp
//Create the UIImage
UIGraphicsBeginImageContext(view.frame.size)
view.layer.renderInContext(UIGraphicsGetCurrentContext())
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
//Save it to camera roll round 2
var library = ALAssetsLibrary()
library.writeImageToSavedPhotosAlbum(image.CGImage, metadata: nil, completionBlock: {
(path:NSURL!, error:NSError!) -> Void in
if NSThread.currentThread() == NSThread.mainThread(){
println("\(path)")
var controller = UIDocumentInteractionController()
controller.delegate = self
controller.UTI = "net.whatsapp.image"
controller.URL = path
controller.presentOpenInMenuFromRect(CGRectZero, inView: self.view, animated: true)
}
})
我收到此错误:
-[UIDocumentInteractionController setURL:] 中的断言失败, /SourceCache/UIKit/UIKit-3318.16.21/UIDocumentInteractionController.m:1024
但根据 Apple 的文档,它必须是 NSURL (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDocumentInteractionController_class/#//apple_ref/occ/instp/UIDocumentInteractionController/URL)
有什么想法吗?
【问题讨论】:
-
但不能是
nil。是吗? -
顺便说一句,不要写
if NSThread.currentThread() == NSThread.mainThread()。使用isMainThread。更好的是,甚至不要问那个问题;如果您的目标是进入主线程,请进入主线程(使用dispatch_async)。 -
@matt 感谢您的反馈!我只是快速检查一下completionBlock 是否在mainThread 上运行。从现在开始我将使用 isMainThread。
-
但是如果它不是主线程呢?你仍然想这样做。照我说的做;与
dispatch_async合作。
标签: ios swift screenshot whatsapp