iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

當涉及到在iOS應用中存儲複雜的數據結構或大量數據時,UserDefaults就不再適用。此時,我們需要一個更強大的持久化存儲方案,那就是Core Data

Core Data簡介

Core Data是Apple提供的一個持久化框架,它允許我們在應用中儲存、檢索和管理持久化對象。這不僅僅是一個資料庫;它更像是一個完整的數據管理解決方案,包括對象關係映射、版本控制、數據遷移等。

創建Core Data Stack

首先,當創建新的iOS項目時,選擇使用Core Data,這會自動為你生成一些基礎代碼和一個.xcdatamodeld文件,這是你的數據模型文件。

AppDelegate.swift中,你會看到以下代碼:

lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "YourProjectName")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()

這裡,NSPersistentContainer是Core Data的主要入口,它將為你處理許多基礎的工作。

定義實體和屬性

.xcdatamodeld文件中,你可以定義你的數據模型。點擊Add Entity添加新實體,例如"Person",並為其添加屬性,例如"name"(String類型)和"age"(Int16類型)。

操作數據

  1. 保存數據
let context = persistentContainer.viewContext

let person = NSEntityDescription.insertNewObject(forEntityName: "Person", into: context) as! Person
person.name = "John"
person.age = 25

do {
    try context.save()
} catch {
    print("Failed saving: \(error)")
}
  1. 檢索數據
let fetchRequest = NSFetchRequest<Person>(entityName: "Person")
do {
    let people = try context.fetch(fetchRequest)
    for person in people {
        print(person.name ?? "")
    }
} catch {
    print("Failed fetching: \(error)")
}
  1. 更新和刪除數據

獲取到的實體可以直接修改其屬性並保存,或使用context.delete(object)方法刪除它,然後再保存上下文。

數據遷移和版本控制

隨著應用的發展,你的數據模型可能需要變更。Core Data提供了版本控制和遷移功能,使你可以輕鬆地升級數據模型,而不會丟失現有的數據。

性能優化

  • 使用fetchRequest.predicate來過濾查詢結果。
  • 使用fetchRequest.fetchBatchSize來控制每次查詢的結果數量,減少內存使用。
  • 關閉不必要的屬性的數據持久化。

結論

Core Data是一個強大的持久化解決方案,它不僅提供了數據存儲,還包括了許多其他的功能,如數據遷移、版本控制等。雖然它的學習曲線可能相對陡峭,但一旦熟悉,它將成為你iOS開發工具箱中的一個非常有價值的工具。


上一篇
第二十三天:UserDefaults
下一篇
第二十五天:多線程
系列文
swift 30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言