iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
Mobile Development

Swift iOS UIKit 初學者系列:從零開始開發互動式應用系列 第 18

【Day 18】Core Data 的修煉-2:探索背後的 SQLite 資料庫結構

  • 分享至 

  • xImage
  •  

在我們前一篇的文章中,我們成功建立了一個極簡的資料表,並將其存儲在 Core Data 使用的 SQLite 資料庫中。在這篇筆記中,我們將深入探索 Core Data 所使用的 SQLite 資料庫,了解其內部結構和操作方式。我們會找到實體 SQLite 檔案,查看並修改其內容,最後觀察修改後在 App 中的顯示變化。

學習目標

  • 理解 Core Data 與 SQLite 的關聯
  • 找到並檢視 SQLite 資料庫檔案
  • 操作 SQLite 資料庫
  • 更深入理解 Core Data 的資料處理流程

預覽效果

手動修改 SQLite 資料庫中的數據後,再重新執行 App 時,可以看到剛剛修改的數據已經在 App 的界面中顯示出來。

1. 找到 Core Data 使用的 SQLite 資料庫

Core Data 本身是一個高層次的資料持久化框架,它的目的是隱藏資料庫的細節,讓開發者能專注於數據的管理。然而,當我們需要更深入地了解 Core Data 的運作時,認識其背後的 SQLite 資料庫結構就顯得格外重要。

要找到 Core Data 所使用的 SQLite 資料庫,我們可以在 Xcode 中進行一些設置來輸出相關路徑信息:

  • 點擊專案的 Scheme 並選擇 Edit Scheme...。
  • 進入 Run > Arguments,在 Arguments Passed On Launch 欄位中加入以下兩個選項:
-com.apple.CoreData.SQLDebug 1
-com.apple.CoreData.Logging.stderr 1

這些參數將允許我們在運行 App 時,Xcode 的控制台中顯示 SQLite 資料庫的存放路徑及其運行時所執行的 SQL 語句。

探索 SQLite 資料庫

現在,當我們執行專案時,可以在控制台中看到 SQLite 資料庫的路徑信息。

運行專案後,控制台將顯示類似以下的訊息:

CoreData: annotation: Connecting to sqlite database file at "/Users/yourname/Library/Developer/CoreSimulator/Devices/…/Library/Application Support/YourAppName.sqlite"

透過這條訊息,我們找到了 Core Data 使用的 SQLite 資料庫檔案。

在 Finder 中打開該路徑,可以看到 SQLite 資料庫文件以及兩個附屬文件(.sqlite-shm 和 .sqlite-wal)。

2. 查看並檢視 SQLite 資料庫內容

知道了 SQLite 資料庫的位置後,我們可以使用工具來檢視其內容。我們可以使用 DB Browser for SQLite 等免費工具來打開這個資料庫,並查看其內部結構。

在打開資料庫後,你會發現裡面包含數個資料表,常見的有:

  • ZSIMPLEENTITY:這是我們用來儲存數據的表,對應到 Core Data 中的 Entity。
  • Z_METADATA、Z_MODELCACHE:這些表用來儲存 Core Data 的元數據。
  • Z_PRIMARYKEY:這是用來追蹤每個表格的流水號。

透過這個過程,我們能更清楚地了解 Core Data 是如何將高階的實體轉換為底層的資料庫表格及其對應欄位的。

3. 修改資料表內容並查看變更

接下來,我們將在 SQLite 資料庫中直接修改數據,並觀察這些修改如何影響 App 的顯示。

使用 DB Browser for SQLite 工具,我們可以打開 ZSIMPLEENTITY 資料表,並手動修改其中的數據。當我們重新執行 App 時,可以看到剛剛修改的數據已經在 App 的界面中顯示出來。這一步展示了資料庫內容與 App 的同步機制,並證明了 Core Data 與其底層 SQLite 資料庫之間的互動。

結語

透過這篇文章,我們深入探索了 Core Data 背後的 SQLite 資料庫結構。了解 Core Data 如何依賴 SQLite 進行資料持久化的運作,不僅幫助我們更好地掌握 Core Data,也讓我們在需要進行低層級的數據管理時擁有更多的操作自由。

SQLite 是 Core Data 的默認儲存機制之一,對其結構的深入理解,能夠幫助我們更靈活地應用 Core Data,並能處理更多複雜的需求(如多對多關聯、複合查詢等)。希望這篇文章能幫助你打開 Core Data 更進階功能的大門,並為你的 iOS 開發旅程提供更強大的工具。

附錄:已接觸的 UIKit 元件

  • Protocol 和 Delegate(Day 14, 15, 16) – 用於物件間通信,實現低耦合資料傳遞與操作。
  • AnimalSounds、Flyable、Swimmable 協議(Day 16) – 示範如何使用多協議來實現不同類型動物的行為。
  • Core Data 與 NSManagedObject(Day 17, 18) – 使用 Core Data 進行基本數據操作,並探索其 SQLite 資料庫結構。

上一篇
【Day 17】Core Data 的修煉-1:從簡單的任務開始 , 存取單一欄位資料表(新增、刪除資料)。
下一篇
【Day 19】iOS 記憶體管理實驗:自動引用計數(ARC)與記憶體洩漏。
系列文
Swift iOS UIKit 初學者系列:從零開始開發互動式應用26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言