こちらのサイトをみながらCoreDataの使い方を学習しています。
https://qiita.com/snowman_mh/items/0d27f4abf7b14c72107f
swift
1 2import UIKit 3 4class AddTaskViewController: UIViewController { 5 6 @IBOutlet weak var taskTextField: UITextField! 7 @IBOutlet weak var categorySegmentedControl: UISegmentedControl! 8 9 var taskCategory = "ToDo" 10 11 @IBAction func categoryChosen(_ sender: UISegmentedControl) { 12 13 switch sender.selectedSegmentIndex { 14 case 0: 15 taskCategory = "ToDo" 16 17 case 1: 18 taskCategory = "Shopping" 19 20 case 2: 21 taskCategory = "Assignment" 22 23 default: 24 taskCategory = "ToDo" 25 } 26 27 } 28 29 30 31 32 33 34 @IBAction func cancelButton(_ sender: Any) { 35 dismiss(animated: true, completion: nil) 36 } 37 38 @IBAction func okButton(_ sender: Any) { 39 } 40 41 @IBAction func plusButton(_ sender: Any) { 42 43 // TextFieldに何も入力されていない場合は何もせずに1つ目のビューへ戻ります。 44 let taskName = taskTextField.text 45 if taskName == "" { 46 dismiss(animated: true, completion: nil) 47 return 48 } 49 50 // context(データベースを扱うのに必要)を定義。 51 let context = (UIApplication.shared.delegate as! AppDelegate) 52 53 // ★★★taskにTask(データベースのエンティティです)型オブジェクトを代入します。 54 // ★★★このとき、Taskがサジェストされない(エラーになる)場合があります。 55 // ★★★詳しい原因はわかりませんが、Runするか、すべてのファイルを保存してXcodeを再起動すると直るので色々試してみてください。 56 let task = Task(context: context) 57 58 // 先ほど定義したTask型データのname、categoryプロパティに入力、選択したデータを代入します。 59 task.name = taskName 60 task.category = taskCategory 61 62 63 // 上で作成したデータをデータベースに保存します。 64 (UIApplication.shared.delegate as! AppDelegate).saveContext() 65 66 dismiss(animated: true, completion: nil) 67 68 } 69 70 71 override func viewDidLoad() { 72 super.viewDidLoad() 73 74 // Do any additional setup after loading the view. 75 } 76 77 78}
コメントの★★★を入れた部分でどうしてもエラーが出てしまいます。
エラーの詳細は
Cannot convert value of type 'AppDelegate' to expected argument type 'NSManagedObjectContext'
翻訳を使うと
タイプ 'AppDelegate'の値を予想される引数タイプ 'NSManagedObjectContext'に変換できません
というエラーが出てしまいます。
作成者の方もエラーが出るとコメントで書いて頂けているのですが、少し古い記事なのか再起動をかける程度では直らなかったので質問させていただきました。
CoreDataの使い方詳しい方、いらっしゃいましたらご教授願います。
よろしくお願いいたします。
1点目
あなたのコードと参考にしたサイトのコードが同じではないです。よく見てください。
2点目
Xcodeのバージョンによってテンプレートが変わるためNSManagedObjectContextを取得する方法が変わります。参考にしているサイトはSwift3を使っているようなのでかなり古い情報と思ったほうが良いです。現在のSwiftのバージョンは5です。
ありがとうございます。
全体のコードを入力する前にひとつひとつコードの状態を確認しながらやってる最中、途中での確認RUNができなかったので、その状態で質問しておりました。
説明不足ですみません。
結構古い記事なので修正も大変かもですね。
エラー箇所や、コードの記述に関して、どことどこがリンクしているのかなんとなくでしかわからないレベルなのでもう少し勉強して、出直そうと思います。
ありがとうございました。
あなたの回答
tips
プレビュー