ゼロから Core Data を学ぶ

とりあえず読み書きができるまで

プロジェクト作成

Single View Application を作成。
ゼロから作成するので Use Core Data はチェックしない。

Data Model 追加

TestData と名前をつけてプロジェクトに追加。
TestData.xcdatamodeld/TestData.xcdatamodel が作成される。

テストモデルでデータの読み書き

TestModel という Entity を追加し、属性 text: String を追加。

ViewController にボタンを設置し、そのボタンを押すたびにモデルが増えるコードを書く。

import UIKit
import CoreData

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // データをロード
        print("load begin")
        container = NSPersistentContainer(name: "TestData")
        container.loadPersistentStores { (desc, error) in
            if let error = error {
                print("load error: \(error)")
            } else {
                print("load ok: \(desc)")
            }
        }
    }

    @IBAction func testButton(_ sender: Any) {

        let context = container.viewContext

        // データ追加、textに任意文字列設定
        let testModel = NSEntityDescription.insertNewObject(forEntityName: "TestModel",
                                                            into: context)
        testModel.setValue(UUID().uuidString, forKey: "text")

        // 保存
        try! context.save()

        // 列挙
        let request = NSFetchRequest<NSManagedObject>(entityName: "TestModel")
        let models = try! context.fetch(request)
        print("-- model count: \(models.count)")
        for model in models {
            let text = model.value(forKey: "text")!
            print("text: \(text)")
        }
    }

    var container: NSPersistentContainer!
}

ボタンを3回押したときの出力:

load begin
load ok: <NSPersistentStoreDescription: 0x60800004d9b0> (type: SQLite, url: file:///Users/rsahara/Library/Developer/CoreSimulator/Devices/D9D49483-571C-409D-87F2-88556CB3D351/data/Containers/Data/Application/C53CF83C-77F4-4719-BA87-242D158B3DC7/Library/Application%20Support/TestData.sqlite)
-- model count: 1
text: E4AA836E-3F59-4F96-B6EF-CB79EFFA57BB
-- model count: 2
text: E4AA836E-3F59-4F96-B6EF-CB79EFFA57BB
text: 3A64EDFE-D6B2-4C9D-A3AD-4D53DFAD4FFE
-- model count: 3
text: E4AA836E-3F59-4F96-B6EF-CB79EFFA57BB
text: 3A64EDFE-D6B2-4C9D-A3AD-4D53DFAD4FFE
text: F0690E43-8E0A-46B0-A491-482E3E407585

アプリを再起動しても、データは保存されている:

load begin
load ok: <NSPersistentStoreDescription: 0x600000241ce0> (type: SQLite, url: file:///Users/rsahara/Library/Developer/CoreSimulator/Devices/D9D49483-571C-409D-87F2-88556CB3D351/data/Containers/Data/Application/6DE5C1D8-FB7C-48F2-9A38-B2BDF0A8885C/Library/Application%20Support/TestData.sqlite)
-- model count: 4
text: E4AA836E-3F59-4F96-B6EF-CB79EFFA57BB
text: 3A64EDFE-D6B2-4C9D-A3AD-4D53DFAD4FFE
text: F0690E43-8E0A-46B0-A491-482E3E407585
text: F1E3B4FB-9BB9-49CA-B886-C4589A698A5F

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です