【Swift4】ToDoリストアプリを作る(3)
肝心要のCoreDataの設定
プロジェクトファイル内に自動的に作られた、アプリ名.Xdatamodeldから
Add Entityをクリックします。
追加されたEntityの名前を、今回は「Task」とします。
Attributesの「+」をクリックして、変数名とデータ型を以下のようにします。

text・・・タスクのテキスト
position・・・タスクのポジション(上から何番目かを表す)
isChecked・・・チェックマークにチェック済みかどうか
dateUIC・・・タスクを識別するためのIDの代わり。現在時刻を記憶する。
空のタスクを、テーブルビューの最下位置に追加する
TableViewControllerに戻り、インポートと、変数の定義と、データベースからTaskの配列を取ってくるメソッドと、まっさらなタスクを追加するメソッドを記述します。
長いです。
import UIKit import CoreData // ←追加 // 略 // タスクを保存する変数 var tasks:[Task] = [] var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext override func viewDidLoad() { super.viewDidLoad() getData() tableView.reloadData() } // CoreDataからTaskを取得し、tasksに格納・position順に並び替えを行う func getData() { do { // CoreDataからデータをfetchしてtasksに格納 let fetchRequest: NSFetchRequest<Task> = Task.fetchRequest() tasks = try context.fetch(fetchRequest) tasks.sort(by: {$0.position < $1.position}) saveData() } catch { print("Fetching Failed.") } } // Taskを追加したり変更した時に呼ぶ func saveData(){ (UIApplication.shared.delegate as! AppDelegate).saveContext() } // TableViewの、Rowの数を返すメソッドではtasksの要素数を返す override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return tasks.count } // 空のタスクを新規追加するメソッド func addNewStickyNote(){ let task = Task(context: context) task.dateUTC = Date().timeIntervalSince1970 task.position = Int64(tasks.count) task.text = "" task.isChecked = false saveData() // tasksに追加し、TableViewに反映させる。追加した付箋までスクロールする tasks.append(task) tableView.insertRows(at: [IndexPath(row: tasks.count - 1, section: 0)], with: .top) tableView.scrollToRow(at: IndexPath(row: tasks.count - 1, section: 0), at: .bottom, animated: true) }
これで、addNewStickyNote()を呼び出せば、空のタスクが追加されるはずです。
前回作成したフローティングアクションボタンから呼び出してみましょう。
ViewControllerから呼び出すときは、
var tableViewController:TableViewController!
以前に作った変数から呼び出すことができます。