Swiftで行こう!--CoreDataを使ってみよ!
下記を参考に自分でもやってみます。
プロジェクトを作ります。この時に
Use Core Dataにチェックをすることを忘れずに!でも、もし忘れてしまっても大丈夫。
を参考に新しいファイル、コードを追加すれば使えるようになります。
CoreDataが使える基本的なプロジェクトができたら次は入れるデータを入れるところを作ります。
一般的なデータベースではテーブルを作りますが、CoreDataではテーブルと言わず、Entitiesと言います。そしてデーターが直接入るフィールドはAttributeという言葉を使っています。ここではEntitiesはMonster、Attributeはnameとしています。
データが入るところを作りました。次にデータを表示、操作するところを作っていきます。
ViewControllerに入力するテキストフィールド、テーブル+セルを表示することを考えます。
textFeld,TableView,TabelCellを設置します。Table cellにidentiferを設定(今回は"Cell"とします)します。テーブルはextensionで記述します。以下。
extension ViewController: UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return monsters.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let monData = monsters[indexPath.row]
cell.textLabel?.text = monData.name
return cell
}
}
extensionなので、class ViewController: UIViewController{}の外に記述します。入るところはできました。あとはデータを入れる場所とテーブルにデータが反映されるタイミングです。これは、入力欄に入力してリターンを押したタイミングにしたいので、
func textFieldShouldReturn(_ textField: UITextField) -> Bool {}
の中に定義していきます。
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
let newObj = Monster(context: self.manager)
newObj.name = textField.text
self.monsters.append(newObj)
(UIApplication.shared.delegate as! AppDelegate).saveContext()
tableView.reloadData()
textField.text = ""
return true
}
こんな感じにまとめています。
すべのコードです。