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

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

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

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

Q&A

解決済

1回答

1299閲覧

UIPickerViewでThread 1: signal SIGABRT

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

1クリップ

投稿2018/10/31 01:24

編集2018/10/31 02:00

前提・実現したいこと

UIPickerViewで値を入力しようと決定ボタンを押した時このエラーが発生しました。
テキストフィールドに値は代入されていました

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

Thread 1: signal SIGABRT #console error 2018-10-31 02:53:52.064126+0100 myapp[15625:1315878] [LayoutConstraints] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. ( "<NSLayoutConstraint:0x600000bf3d90 UILabel:0x7fc9f7d1ef20'Music List'.top >= UILayoutGuide:0x6000011810a0'TitleView(0x7fc9f7d11b50)'.top (active)>", "<NSLayoutConstraint:0x600000bf3ca0 UILabel:0x7fc9f7d1ef20'Music List'.firstBaseline == UILayoutGuide:0x6000011810a0'TitleView(0x7fc9f7d11b50)'.top + 28 (active)>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x600000bf3d90 UILabel:0x7fc9f7d1ef20'Music List'.top >= UILayoutGuide:0x6000011810a0'TitleView(0x7fc9f7d11b50)'.top (active)> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful. 2 2018-10-31 02:53:58.912895+0100 myapp[15625:1315878] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /Users/appleiii/Library/Developer/CoreSimulator/Devices/81E3701C-6E1D-4773-B905-5ACE8A21E5E1/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles 2018-10-31 02:53:58.913954+0100 myapp[15625:1315878] [MC] Reading from private effective user settings. 1 2 2018-10-31 02:54:02.751505+0100 myapp[15625:1315878] -[NSTaggedPointerString myok:]: unrecognized selector sent to instance 0xc5238370774d43df 2018-10-31 02:54:02.767196+0100 myapp[15625:1315878] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString myok:]: unrecognized selector sent to instance 0xc5238370774d43df' *** First throw call stack: ( 0 CoreFoundation 0x000000010655729b __exceptionPreprocess + 331 1 libobjc.A.dylib 0x0000000105679735 objc_exception_throw + 48 2 CoreFoundation 0x0000000106575fa4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 3 CoreFoundation 0x000000010655bfb6 ___forwarding___ + 1446 4 CoreFoundation 0x000000010655de88 _CF_forwarding_prep_0 + 120 5 UIKitCore 0x0000000110b667c3 -[UIApplication sendAction:to:from:forEvent:] + 83 6 UIKitCore 0x0000000110bd5b58 __45-[_UIButtonBarTargetAction _invoke:forEvent:]_block_invoke + 154 7 UIKitCore 0x0000000110bd5a91 -[_UIButtonBarTargetAction _invoke:forEvent:] + 152 8 UIKitCore 0x0000000110b667c3 -[UIApplication sendAction:to:from:forEvent:] + 83 9 UIKitCore 0x0000000110c9ee85 -[UIControl sendAction:to:forEvent:] + 67 10 UIKitCore 0x0000000110c9f1a2 -[UIControl _sendActionsForEvents:withEvent:] + 450 11 UIKitCore 0x0000000110c9e0e6 -[UIControl touchesEnded:withEvent:] + 583 12 UIKitCore 0x0000000111379334 -[UIWindow _sendTouchesForEvent:] + 2729 13 UIKitCore 0x000000011137aa30 -[UIWindow sendEvent:] + 4080 14 UIKitCore 0x0000000110b80e10 -[UIApplication sendEvent:] + 352 15 UIKitCore 0x0000000110ab90d0 __dispatchPreprocessedEventFromEventQueue + 3024 16 UIKitCore 0x0000000110abbcf2 __handleEventQueueInternal + 5948 17 CoreFoundation 0x00000001064bab31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 18 CoreFoundation 0x00000001064ba3a3 __CFRunLoopDoSources0 + 243 19 CoreFoundation 0x00000001064b4a4f __CFRunLoopRun + 1263 20 CoreFoundation 0x00000001064b4221 CFRunLoopRunSpecific + 625 21 GraphicsServices 0x000000010bf041dd GSEventRunModal + 62 22 UIKitCore 0x0000000110b65115 UIApplicationMain + 140 23 myapp 0x0000000104d350d7 main + 71 24 libdyld.dylib 0x0000000108b34551 start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

該当のソースコード

swift

1 2import UIKit 3import AVFoundation 4 5class playViewController: UIViewController, UITextFieldDelegate{ 6 7 let engine = AVAudioEngine() 8 let speedControl = AVAudioUnitVarispeed() 9 let pitchControl = AVAudioUnitTimePitch() 10 11 @IBOutlet weak var pitchText: UITextField! 12 @IBOutlet weak var speedText: UITextField! 13 let myPicker = UIPickerView() 14 let toolBar = UIToolbar() 15 var selectedField = 0 16 17 var dataList:[String] = [] 18 let speedList:[String] = ["10", "20", "30", "40", "50", "60", "70", "80", "90", "100", 19 "110", "120", "130", "140", "150", "160", "170", "180", "190", "200"] 20 let pitchList:[String] = ["-12", "-11", "-10", "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1", "0", 21 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "24"] 22 23 override func viewDidLoad() { 24 super.viewDidLoad() 25 pitchText.delegate = self 26 speedText.delegate = self 27 pitchText.tag = 1 28 speedText.tag = 2 29 createPicker() 30 createToolBar() 31 } 32 33 func play(_ url: URL) throws { 34 let audioFile = try AVAudioFile(forReading: url) 35 let audioPlayer = AVAudioPlayerNode() 36 37 engine.attach(audioPlayer) 38 engine.attach(pitchControl) 39 engine.attach(speedControl) 40 41 engine.connect(audioPlayer, to: speedControl, format: nil) 42 engine.connect(speedControl, to: pitchControl, format: nil) 43 engine.connect(pitchControl, to: engine.mainMixerNode, format: nil) 44 45 // 5: prepare the player to play its file from the beginning 46 audioPlayer.scheduleFile(audioFile, at: nil) 47 48 try engine.start() 49 audioPlayer.play() 50 } 51 52 func getSampleRate(_ url: URL) throws -> (Double) { 53 let audioFile = try AVAudioFile(forReading: url) 54 let sampleRate = audioFile.fileFormat.sampleRate 55 let duration = Double(audioFile.length) / sampleRate 56 return duration 57 } 58 59 func createPicker() { 60 myPicker.delegate = self 61 myPicker.dataSource = self 62 myPicker.frame = CGRect(x: 0, y: 4500, width:375.0, height: 162.0) 63 myPicker.backgroundColor = UIColor.white 64 speedText.inputView = myPicker 65 pitchText.inputView = myPicker 66 } 67 68 func createToolBar() { 69 toolBar.sizeToFit() 70 let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: "self", action: Selector(("myok:"))) 71 toolBar.setItems([doneButton], animated: false) 72 toolBar.isUserInteractionEnabled = true 73 74 speedText.inputAccessoryView = toolBar 75 pitchText.inputAccessoryView = toolBar 76 } 77 78 func myok(sender: UIBarButtonItem) { 79 view.endEditing(true) 80 } 81 82 func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { 83 //dataList = textField.tag == 1 ? pitchList : speedList 84 if textField.tag == 1 { 85 dataList = pitchList 86 selectedField = 1 87 print(selectedField) 88 } else if textField.tag == 2 { 89 dataList = speedList 90 selectedField = 2 91 print(selectedField) 92 } else { 93 print("error") 94 } 95 myPicker.reloadAllComponents() 96 return true 97 } 98 99} 100 101extension playViewController: UIPickerViewDelegate, UIPickerViewDataSource { 102 103 func numberOfComponents(in pickerView: UIPickerView) -> Int { 104 return 1 105 } 106 107 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 108 return dataList.count 109 } 110 111 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 112 return dataList[row] 113 } 114 115 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 116 if selectedField == 1 { 117 inputvalue = dataList[row] 118 pitchText.text = inputvalue 119 inputvalue = "" 120 } else if selectedField == 2 { 121 inputvalue = dataList[row] 122 speedText.text = inputvalue 123 inputvalue = "" 124 }else { 125 print("error") 126 } 127 } 128}

ストーリーボードのリファレンスアウトレット
イメージ説明
イメージ説明

試したこと

resignFirstResponder()も試しましたが結果は同じでした。

補足情報(FW/ツールのバージョンなど)

swift4.2

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

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

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

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

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

fuzzball

2018/10/31 01:57

Consoleに表示されるエラーメッセージを書いて下さい。「テキストフィールドに値は代入されていました」はどうやって確認したのでしょうか?
退会済みユーザー

退会済みユーザー

2018/10/31 02:01

Thread 1: signal SIGABRTが出た後のシミュレータを確認したら値がテキストフィールドに入っていました
guest

回答1

0

ベストアンサー

reason: '-[NSTaggedPointerString myok:]: unrecognized selector sent to instance 0xc5238370774d43df'

というエラーですから、NSTaggedPointerStringクラスのmyokメソッドを呼び出そうとしてエラーになっています。
コードを見ると

swift

1let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: "self", action: Selector(("myok:")))

となっています。
targetに指定しているのが "self"という文字列を指定しているからNSTaggedPointerStringという文字列クラスに対してmyokメソッドを呼び出そうとしてエラーになったのだと思います。とりあえずそこは文字列ではなくて selfを指定する必要がありますが、actionで指定しているselectorも古い書き方になっているので、次のようにする必要があります。

(doneButton作成処理)

swift

1let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(myok(_:)))

(myokメソッドの宣言部分)

swift

1@objc func myok(_ sender: UIBarButtonItem) {

投稿2018/11/03 16:25

TakeOne

総合スコア6299

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

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

退会済みユーザー

退会済みユーザー

2018/11/06 10:58

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問