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

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

ただいまの
回答率

88.22%

Thread 1:signal SIGABRTって何?

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,227

Takahashi.

score 29

import UIKit

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource,UITextFieldDelegate{




    @IBOutlet weak var getUpTimeTextField: UITextField!
    var getUpTimeDatePicker: UIDatePicker!
    var gerUpTimeDatePickerView: UIPickerView = UIPickerView()


    @IBOutlet weak var sexTextField: UITextField!
    var sexPickerView: UIPickerView = UIPickerView()
    let sexList = ["男","女"]

    override func viewDidLoad() {
        super.viewDidLoad()

        getUpTimeTextField.placeholder = dateToString(date: Date()) //<-`dateToString`のパラメータは`Date`型なので最初から`Date()`を渡す
        getUpTimeTextField.text        = dateToString(date: Date()) //<-同上
        self.view.addSubview(getUpTimeTextField)
        getUpTimeDatePicker = UIDatePicker()
        getUpTimeDatePicker.addTarget(self, action: #selector(changedDateEvent), for: UIControlEvents.valueChanged)
        getUpTimeDatePicker.datePickerMode = UIDatePickerMode.time
        getUpTimeTextField.inputView = getUpTimeDatePicker

        let getUpTimeToolbar = UIToolbar(frame: CGRectMake(0, 0, 0, 35))
        let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ViewController.done))
                getUpTimeToolbar.setItems([doneItem], animated: true)

        self.getUpTimeTextField.inputView = getUpTimeTextField
        self.getUpTimeTextField.inputAccessoryView = getUpTimeToolbar
        getUpTimeToolbar.backgroundColor = UIColor.gray


        sexPickerView.delegate = self
        sexPickerView.dataSource = self
        sexPickerView.showsSelectionIndicator = true
        self.sexTextField.text = sexList[0]
        let sextoolbar = UIToolbar(frame: CGRectMake(0, 0, 0, 35))
                sextoolbar.setItems([doneItem], animated: true)

        self.sexTextField.inputView = sexPickerView
        self.sexTextField.inputAccessoryView = sextoolbar
        sextoolbar.backgroundColor = UIColor.gray
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return sexList.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return sexList[row]
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        self.sexTextField.text = sexList[row]
    }

    func done() {
        self.sexTextField.endEditing(true)
        //self.testlabel.text = self.textField.text
    }

    func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
        return CGRect(x: x, y: y, width: width, height: height)
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

        func changeLabelDate(date: Date) { //<- `NSDate`を使っているところは全て`Date`に置き換える
            getUpTimeTextField.text = self.dateToString(date: date)
        }


        func dateToString(date: Date) -> String {
            //DateFormatterは参照型なので、letが適切
            let date_formatter = DateFormatter()
            //曜日の1文字表記をしたいならweekdaysなんて配列はいらない

            date_formatter.locale     = Locale(identifier: "ja")
            date_formatter.dateFormat = "hh時間mm分 "
            return date_formatter.string(from: date as Date)
        }

        func changedDateEvent(_ sender: UIDatePicker){ //<- `UIDatePicker`からのactionの`sender`は必ず`UIDatePicker`になる
            //`sender`を直接`UIDatePicker`として使えばいいのでキャストは不要
            self.changeLabelDate(date: sender.date)
        }
        // Dispose of any resources that can be recreated.

}


これを実行した結果次のようなエラーが出ました。
時間の方のtextFieldをタップすると落ちます。
なぜエラーが出るのかわかりません。教えてください

以下がエラーコードです

2017-07-18 01:13:24.598936+0900 label2[2005:679534] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2017-07-18 01:13:24.599416+0900 label2[2005:679534] [MC] Reading from public effective user settings.
2017-07-18 01:13:24.653404+0900 label2[2005:679534] * Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<UICompatibilityInputViewController: 0x100b35080> should have parent view controller:<label2.ViewController: 0x100b08890> but requested parent is:<UIInputWindowController: 0x1010c7200>' * First throw call stack:
(0x181afafe0 0x18055c538 0x181afaf28 0x187cc6728 0x1886178c0 0x1886189e4 0x187c39d20 0x188618758 0x188611494 0x187cf0d5c 0x187c51d44 0x187caf550 0x187caf8c0 0x187d30834 0x187dd5e58 0x187dd5368 0x1881fdd38 0x18820156c 0x187dbb470 0x187c5d380 0x1881f1810 0x1881f13e0 0x1881f068c 0x187c5b70c 0x187c2c33c 0x188426014 0x188420770 0x188420b9c 0x181aa942c 0x181aa8d9c 0x181aa69a8 0x1819d6da4 0x183440074 0x187c91058 0x1000149ac 0x1809e559c)
libc++abi.dylib: terminating with uncaught exception of type NSException

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

View の階層関係が壊れてしまっているエラー内容になります。
下記コードで inputView に TextField を設定しているのが原因です。

        self.getUpTimeTextField.inputView = getUpTimeTextField

また、このスコープでの getUpTimeTextField へのアクセスに self は不要なので削除した方が見やすいかと思います。

以下のコードも上記と同じ getUpTimeTextField を指していることになります。

        getUpTimeTextField.inputView = getUpTimeDatePicker

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る