【发布时间】:2018-04-08 11:16:13
【问题描述】:
我正在尝试通过电子邮件发送 PHAsset 图像。我首先尝试在沙盒应用程序中获取基本案例,然后我想最终迭代一组 PHAsset。下面是我的沙盒代码,然后是我遇到的几个问题/问题。 (其中一些代码 sn-p 来自 this SO post。)这是尝试实现我发现的名为 TLPHAssets 的多资产选择器的一部分,它看起来是来自 Swift-4 / PHAsset 的最新版本this list on another SO post.
func dismissPhotoPicker(withTLPHAssets: [TLPHAsset]) {
// use selected order, fullresolution image
self.selectedAssets = withTLPHAssets
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self;
mail.setToRecipients(["emailaddress.com"])
// Put the rest of the email together and present the draft to the user
mail.setSubject("Subject")
let options = PHImageRequestOptions()
options.isNetworkAccessAllowed = true
options.version = .current
options.deliveryMode = .opportunistic
options.resizeMode = .fast
let asset : PHAsset = self.selectedAssets[0].phAsset! as PHAsset
PHImageManager.default().requestImage(for: asset, targetSize: CGSize(width : 400, height : 400), contentMode: .aspectFit, options: options, resultHandler: {(result: UIImage!, info) in
if let image = result
{
let imageData: NSData = UIImageJPEGRepresentation(image, 1.0)! as NSData
mail.addAttachmentData(imageData as Data, mimeType: "image/jpg", fileName: "BeforePhoto.jpg")
}
})
两个问题(我对 Swift 很陌生,所以如果我遗漏了一些基本的东西,我深表歉意):
我无法让 resultHandler 代码块得到执行。我将 targetSize 设置为 PHImageManagerMaximumSize,但随后在另一篇文章的推荐下将其更改为 400x400(顺便说一下,我只是从相机胶卷中挑选了一张图像,并且在我的测试用例中确认了 PHAsset 的 mediaType 是' image'; 尚未使用 Live Photo 或 Video,尽管我计划接下来处理这些问题,并且我将添加一个 switch 语句以确保调用正确的资产请求处理程序)。为什么 PHImageManagerMaximumSize 不起作用?当我在模拟器中运行应用程序并选择五个罐装图像之一时,我仍然无法进入 resultHandler 代码块(这些都是 mediaType 'image')。知道我的 requestImage 调用可能有什么问题会阻止调用 resultHandler 吗?
我最终确实从我的相机胶卷中获得了一张图像,从而导致使用 400x400 的 targetSize 调用 resultHandler 代码。但是现在在 resultHandler 中,我的沙盒应用程序在“let imageData: NSData ...”行中崩溃了“2017-10-26 15:35:26.604997-0700 MultiAssetPicker[15766:4904592] 致命错误:意外发现 nil 而展开可选值”。
非常感谢任何和所有帮助。
【问题讨论】: