質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

3591閲覧

Swiftで通常の写真を→モノクロ写真へと変えるアプリを作りたい

keys

総合スコア215

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/10/03 01:24

###前提・実現したいこと

「モノクロ」ボタンを押して画像をモノクロにする

###発生している問題・エラーメッセージ

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にソースをすべて公開↓

https://github.com/Ryosuke-Hujisawa/Swift-2016-10-1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こちらの環境がXcode7なので、細かいところで違いがあるかも知れません。(githubのプロジェクトも動かせません)

どこで止まっているか調べる方法

  • Breakpoint Navigatorを表示する
  • 左下のを押して、Add Exception Breakpoint...を選択。設定(吹き出し)はデフォルトのままでいいので、そのまま閉じる。
  • 実行する。

どこで止まっているか

swift

1CIFilter.setValue(ciImage, forKey: kCIInputImageKey)

ここ。

どうすれば止まらなくなるか

swift

1ciFilter.setValue(ciImage, forKey: kCIInputImageKey)

こうする。上の行で生成したインスタンスにsetValueしないといけない。

教訓

ビルドは成功するのでソースコードにミスはない。

そんなことはありません。
ビルド成功はスタート地点に過ぎません。

投稿2016/10/03 07:59

編集2016/10/03 08:12
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keys

2016/10/04 02:17

ありがとうございます。「ビルド成功はスタート地点」。教訓にします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問