2013年6月11日 星期二

Core Data - Using SQLite3 With FMDB 在iOS中使用SQL搭配FMDB控制Database

有興趣自己去看這裡, 最近應該會看看這塊文章, 想到啥寫啥
應該會一邊做CoreData的, 一邊做SQLite來比對(SQL語法我不會, 順便學)
寫了一個練習程式, 同時包含CoreData以及SQLite3很基礎的使用

一開始要使用的Framework就碰到問題
libsqlite3.dylib 與 libsqlite3.0.dylib 的差異
libsqlite3可以說是一個參照, 總是連接到最新的libsqlite ,像目前是libsqlite3.0.dylib
假如說以後出了 libsqlite3.1.dylib 那就會改連接到新版的

網路上查libsqlite3是使用C語法來, 直接操作有點麻煩
好在有個叫FMDB的Library可以用, 可用我之前寫的CocoaPods來整合進去

先看AppDelegate CoreData的部分, 有三個主要構成物件, 這裡有英文解釋, 我以我的想法來說明:
1.managedObjectContext
   大部分時間都在跟它打交道, 每次要插入刪除資料都會用到, 整個App中似乎只會實體
   化一次, 所以當要進入下個class需要pass過去, 當然以可以用delegate方式拿取
2.managedObjectModel
   就是我們設計那很漂亮的圖形模組CoreData.xdatamodeled
3.persistentStoreCoordinator
   大部分中文都翻永久儲存體, 就是資料庫檔案啦 xxx.sqlite

Model裡面的Entity, 其實就是個Table表, 而attribute就是在create table後面接的那些名稱與屬性

然後再其它AppDelegate中, 三個產生上述實體的方法

1. - (NSManagedObjectContext *)managedObjectContext
   會先檢查managedObjectContext是否已存在, 不存在的話他會去產生永久儲存體
   (CoreData.sqlite), 儲存體產生返回之後再產生managedObjectContext實體
2. - (NSPersistentStoreCoordinator *)persistentStoreCoordinator
   當要產生永久儲存體(CoreData.sqlite)時, 此方法會去產生Model實體(當然啦 不弄個Model
   實體出來怎知道我們資料庫欄位怎樣設計的)
3. - (NSManagedObjectModel *)managedObjectModel
   這就沒啥好解釋了, 就單純產生實體然後回傳給persistentStoreCoordinator, 做為產生永
   久儲存體的參考資料

至於SQL部份, 我是把建立資料庫及資料表寫在application:didFinishLaunchingWithOptions 這裡面

剩下TableViewController Class, 我在裡面都寫了注解, 應該不會很難懂, 反正我主要是給自己看, 我懂就好了XD
雖然CoreData我應該是會使用Table之間的Relationships, SQLite3的這部分還沒開始研究
之後有空再看看再找資料~


Tip:
1. Edit Scheme -> 於Run ProjectName的Arguments的Arguments Passed On Launch加入
    -com.apple.CoreData.SQLDebug 1
    這樣於Console會顯示Core Data的SQL運作方式

沒有留言:

張貼留言