###前提・実現したいこと
「モノクロ」ボタンを押して画像をモノクロにする
###発生している問題・エラーメッセージ
libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)
###発生している問題・エラーメッセージ
class AppDelegate: UIResponder, UIApplicationDelegate { Thread 1:signal SIGABRT
###該当のソースコード
swift
1 2import UIKit 3 4class ViewController: UIViewController , UIImagePickerControllerDelegate, UINavigationControllerDelegate { 5 6 @IBOutlet weak var imageView: UIImageView! 7 8// var originalImage: UIImage? 9 10 //画像を編集するために画像を保持しておく変数 11 var originalImage: UIImage? 12 13 14 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 // Do any additional setup after loading the view, typically from a nib. 19 } 20 21 22 @IBAction func handleTap(sender: UITapGestureRecognizer) { 23 24 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) { 25 let ipc:UIImagePickerController = UIImagePickerController(); 26 ipc.delegate = self 27 28 //sourceTypeってなんすか?? 29 ipc.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 30 31 32 //presentViewControllerってなんすか?? 33 self.presentViewController(ipc, animated: true, completion: nil) 34 } 35 36 } 37 38 39 40 41 //ImagePickerで画像が選択されたときに呼ばれる 42 43 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 44 if info [UIImagePickerControllerOriginalImage] != nil { 45 46 //選択した画像を UIImageViewに設定する 47 imageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage 48 49 //加工用にメンバ変数に保持 50 originalImage = info[UIImagePickerControllerOriginalImage]as? UIImage 51 } 52 53 //Imageviewを閉じる 54 picker.dismissViewControllerAnimated(true, completion: nil) 55 } 56 57 58 override func didReceiveMemoryWarning() { 59 super.didReceiveMemoryWarning() 60 // Dispose of any resources that can be recreated. 61 } 62 63 // モノクロボタンが押された時に呼ばれる 64 @IBAction func pushedMonochrome(sender: UIButton) { 65 66 guard let image = imageView.image else { 67 68 return 69 } 70 71 let monochroImage = monochromeImages(image) 72 73 imageView.image = monochroImage 74 originalImage = monochroImage 75 76 } 77 78 //引数のUIImage の画像をモノクロ化した UIImageを返す 79 func monochromeImages (srcImage: UIImage) -> UIImage { 80 //どうしてpushedMonochromeの中に処理を書かないのだろう 81 82 83 //UIImageからCIImageを作る 84 let ciImage: CIImage = CIImage(image:srcImage)!; 85 86 //コンテキストを作成する 87 let ciContext:CIContext = CIContext(options: nil) 88 89 //フィルターを作成する 90 let ciFilter:CIFilter = CIFilter(name: "CIMinimumComponent")! 91 CIFilter.setValue(ciImage, forKey: kCIInputImageKey) 92 93 //フィルターを通した画像を生成する 94 let cgimg:CGImageRef = ciContext.createCGImage(ciFilter.outputImage!, fromRect: ciFilter.outputImage!.extent)! 95 96 97 //CGImageRefからUIImageを作成して返す 98 return UIImage(CGImage: cgimg, scale: 1.0, orientation: UIImageOrientation.Up) 99 100 } 101 102 // スライダーの値が変わった時に呼ばれる 103 @IBAction func valueChanged(sender: UISlider) { 104 105 } 106 107 // 保存ボタンが押された時に呼ばれる 108 @IBAction func save(sender: UIButton) { 109 110 } 111} 112
###考えられる原因・アドバイス頂きたい点
ビルドは成功するのでソースコードにミスはない。しかし、「モノクロ」ボタンを押した途端に泊まるのでIBActionの中の処理か、IBActionで呼び出した関数の中の処理に問題があると思われる
Thread 1:signal SIGABRT というエラーはたまによく現れるが、具体的なエラーの内容がわかりにくいので、どのように考えるべきかアドバイス頂きたい。ネットで調べると「ストーリーボード上のミスがこのエラーの原因」だという説あり
また、右下のログに関しても、初期状態で「モノクロ」を押すと enable_private_data: 0というログが出るので動いてると思う。画像を選択した状態で「モノクロ」を押すとエラーになる。
だから、「もし関数に値が入ってなかったらreturn返す」という処理は呼ばれてるということになる。つまり、画像が変数に入った時に確実にエラーが発生している。
つまり、エラーが起きているのは、モノクロボタンを押された時に呼ばれるIBActionのところでもなく、IBActionの処理で呼ばれる画像をモノクロにして返すという処理でもないのではないか?もっと前でエラーが起こってるのではないか?
しかし、自分の知識ではここで思考が停止しました。
###補足情報(言語/FW/ツール等のバージョンなど)
xcode8
swift2.3
githubにソースをすべて公開↓

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/04 02:17