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

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

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

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

Swift

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

Q&A

1回答

1565閲覧

UITextFieldの空白確認とcore dataの問題について

_s.k_

総合スコア7

Xcode

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

Swift

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

0グッド

0クリップ

投稿2016/11/24 05:50

todoアプリを作っていて一応求めている動きを実現させたのですがいくつか疑問点が二つあるので質問させていただきました。
アプリの構成はUITextField(インスタンスの名前はtextField)のテキストとUISwitch(インスタンスの名前はisImp)のbooleanの値をボタン(btnAdd)を押すことでcore dataに保存する形でcore dataのentity nameはTask,attributeはnameとisImportantです。
現在は下のようなコードになっています。(ボタンの部分のみ切り出しました。)

@IBAction func btnAdd(_ sender: Any) { if textField.text?.characters.count != 0{ let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext //entityのクラス?を作成 let task = Task(context: context) task.name = textField.text! task.isImportant = isImp.isOn //save the data to coredata (UIApplication.shared.delegate as! AppDelegate).saveContext() navigationController!.popViewController(animated: true) }else{ let nTAlert = UIAlertController(title: "enter your task", message: nil, preferredStyle: .alert) present(nTAlert, animated: true, completion: nil) let okAction = UIAlertAction(title: "OK", style: .cancel, handler: {action -> Void in}) nTAlert.addAction(okAction) } }

textFieldになにも入力されなかった場合enter your taskと表示されるように作りたかったので上のようになりました。
一つ目の疑問点はtextFieldの空白を確認するために上では文字数をカウントしていますがオプショナルバインディングは使えないのでしょうか?

if let jnil = textField.text{...

としたところうまくいきませんでした。

二つ目の疑問点は

@IBAction func btnAdd(_ sender: Any) { let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext //entityのクラス?を作成 let task = Task(context: context) if textField.text?.characters.count != 0{ task.name = textField.text! task.isImportant = isImp.isOn //save the data to coredata (UIApplication.shared.delegate as! AppDelegate).saveContext() navigationController!.popViewController(animated: true) }else{ let nTAlert = UIAlertController(title: "enter your task", message: nil, preferredStyle: .alert) present(nTAlert, animated: true, completion: nil) let okAction = UIAlertAction(title: "OK", style: .cancel, handler: {action -> Void in}) nTAlert.addAction(okAction) } }

とした場合に空白でボタンを押してから文字を入力してボタンをもう一度押すとエラーが出ました。appleの公式サイトで調べるとviewContextのスーパクラスは一つのcontextに一つしか存在できないと書いてあったのでそれが今回のエラーの原因なのでしょうか?ボタンを押して実行された関数は終わったら捨てられてもう一度ボタンを押したらまた新しい関数が作られるからいいかなと思ったんですがこの考えのどこに間違いがあるのか教えて下さい宜しくお願いします。

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

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

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

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

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

guest

回答1

0

一つ目

nil""(カラ文字列)は違います。
TextFieldの入力完了時に「カラ文字列だったらnilを入れる」という処理を書いておけば、nil判定だけでもいけますが。

swift

1if let text = textField.text where !text.isEmpty { 2 print("[\(text)]") 3} else { 4 print("enter your task") 5}

二つ目

よく分からないのでパス。

投稿2016/11/24 06:09

編集2016/11/24 06:14
fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問