PHAssetイメージを電子メールで送信しようとしています。私はまず、基底ケースをサンドボックスアプリケーションに入れようとしています。そして、最終的にPHAssetsの配列を繰り返し処理したいと考えています。以下は私のサンドボックスコードです。それに続くいくつかの質問/問題があります。 (このコードスニペットの一部はthis SO postから来ました。)これはTLPHAssetsと呼ばれるマルチアセット・ピッカーを実装しようとしている部分の1つで、this list on another SO postから現在のSwift-4/PHAssetの最新バージョンです。Swift 3 PHAssetを電子メールで送信
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")
}
})
つの質問(私は基本的に何か欠けている場合、私は謝罪ので、スウィフトにかなり新しいです):
を私が今までに実行を取得するために、トラブルコードのresultHandlerブロックを取得を抱えています。私はtargetSizeをPHImageManagerMaximumSizeに設定しましたが、別のポストの勧告で400x400に変更しました(ちなみに私はカメラのロールからイメージを選んでいますが、PHAssetのmediaTypeが '私は正しいアセットリクエストハンドラを確実に呼び出すためにswitch文を追加します)。なぜPHImageManagerMaximumSizeが機能しないのですか?そして、私がシミュレータでアプリケーションを実行し、5つの缶詰めの画像のうちの1つを選択すると、resultHandlerコードブロックに入ることはできません(これらはすべてmediaType 'image'です)。 resultHandlerの呼び出しを妨げているrequestImage呼び出しで何が間違っているのでしょうか?
最終的に私のカメラのロールからイメージを取得し、targetSizeで400x400でresultHandlerコードを呼び出すようにしました。しかし、結果resultHandlerの中で、私のサンドボックスアプリは、 "2017-10-26 15:35:26.604997-0700 MultiAssetPicker [15766:4904592]と" let imageData:NSData ... "という行にクラッシュしています。オプションの値をアンラップする "。
ご協力いただきありがとうございます。