###質問
UIImageをcropしたところ以下のようなエラーが発生します。
swift
1-[UIImage release]: message sent to deallocated instance 0x288ca6250
このエラーを追跡してみると以下のコードでエラ-が起きていることが判明しました。
swift
1extension UIImage { 2 func crop(rect to: CGRect) -> UIImage? { 3 var opaque = false 4 if let cgImage = cgImage { 5 switch cgImage.alphaInfo { 6 case .noneSkipLast, .noneSkipFirst: 7 opaque = true 8 default: 9 break 10 } 11 } 12 13 UIGraphicsBeginImageContextWithOptions(to.size, opaque, scale) 14 draw(at: CGPoint(x: -to.origin.x, y: -to.origin.y)) //ここで発生 15 let result = UIGraphicsGetImageFromCurrentImageContext() 16 UIGraphicsEndImageContext() 17 return result 18 } 19}
具体的には上のコードのこの部分です。
swift
1draw(at: CGPoint(x: -to.origin.x, y: -to.origin.y))
開発環境は
xcode 11.4です。
もし解決策をご教授いただけるのであれば大変助かります。
よろしくお願いいたします。
###追加情報
この関数を毎フレームに対して動かしていて、基本的に問題ないのですが、極たまに上記のエラーが急に発生します。
アプリを立ち上げた瞬間に起こることもあれば、長く動かした後に起こることもあります。
質問を投稿した後に判明しましたが、厳密にいうとdrawがエラーを起こしているわけではなくて、エラーが発生して、breakするタイミングが必ずdrawのタイミングになります。
この質問では私が投稿した前の質問にリンクしています。
https://teratail.com/questions/251948
私が取り組んでいるプロジェクトではベストアンサーのものを採用しました。理由は単純に今のアプリとのcompatibilityが高かったからです。他の方々の提示してくれた方法もcropできますが、アプリと最もよくマッチしたのはこちらのコードでしたので、このような形となっております。
前問に協力していただいた皆様には深く感謝を申し上げます。
後から追加ばかりですみません。
元々はEXE_BAD_ACCESSというiOSでは有名はエラーにぶち当たってしまったのが発端です。これに遭遇した人はわかると思うのですが、このエラーが発生すると、コードのどの部分がいけないのかを教えてくれません。そこでZombieを追跡することにしました。すると、まず最初に上記のエラー文がターミナル上に表示され、何回も実行してよくよく探してみるとどの実行時のエラーでも同じdrawで止まっている、という共通点を発見した次第です。
回答1件
あなたの回答
tips
プレビュー