2017-07-01 8 views
0

が、私はこのコードを使用して私のiPhone上のユーザカメラロールに画像を保存しようとしていた失敗:保存ユーザーにフォトライブラリには、サイレント

UIImageWriteToSavedPhotosAlbum(uiImage, nil, nil, nil)

しかし、クラッシュしたり、エラーを与えていないにも関わらず、それが失敗していた

。私はイメージが有効な(無しではない)UIImageであることを確認しました。そこで、私は完了ハンドラを次のように実装しようとしました:

UIImageWriteToSavedPhotosAlbum(uiImage, self, #selector(self.image(_:didFinishSavingWithError:contextInfo:)), nil) 

// .... 

@objc func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) { 
    if error != nil { 
     print("ERROR! ", error!.localizedDescription) 
    } 
} 

これでも私にはエラーが発生しませんでした。最後に、私はシミュレータを走らせてみました。これが失敗する原因は何

Connection to assetsd was interrupted or assetsd died

Error! Write failed

:これは、私に次のエラーを与えましたか?

答えて

0

UIImageWriteToSavedPhotosAlbumを実行するには、 "CGImage-backedでなければならない"と言われたthis linkが出ました。だから、回避するために、私は、バックUIImageに、CGImageに、その後、CIImageに私のUIImageに変換するには、次のコードを書いた:

let ciImage = self.image!.ciImage 
let context = CIContext() 
let cgImage = context.createCGImage(ciImage!, from: ciImage!.extent) 
let uiImage = UIImage(cgImage: cgImage!) 

UIImageWriteToSavedPhotosAlbum(uiImage, self, #selector(self.image(_:didFinishSavingWithError:contextInfo:)), nil) 

これは最終的に働いており、期待通りのカメラロールに保存されました!

関連する問題