淺談iPhone中 CoreData 框架
iPhone中 CoreData 框架是本文要介紹的內容,非嚴格的說, CoreData是對sqlite數據庫的一個封裝sqlite數據庫操作的基本流程是, 創建數據庫, 再通過定義一些字段來定義表格結構, 可以利用sql語句向表格中插入記錄, 刪除記錄, 修改記錄, 表格之間也可以建立聯系.
這個過程出現了, 表格的結構(schema), 所有表格的結構和相互聯系構成整個數據庫的模型, 數據庫存放的方式(可以是文件或者在內存), 數據庫操作, sql語句(主要是查詢), 表格里面的記錄
下面將上面說的文字, 跟CoreData的類作個對應:
表格結構 --> NSEntityDescription
數據庫中所有表格和他們的聯系 -->NSManagedObjectModel
數據庫存放方式 --> NSPersistentStoreCoordinator
數據庫操作 --> NSManagedObjectContext
查詢語句 --> NSFetchRequest
表格的記錄 --> NSManagedObject
可能上面的對應關系并非十分嚴格, 但確實可以幫助理解.
下面再看看CoreData的類
- NSEntityDescription
- NSManagedObjectModel
NSEntityDescription用來定義表格結構, 所以你就可以理解NSManagedObjectModel中的setEntities:(NSArray *)entities函數大概有什么用了 . 通常, 定義model, 是用文件CoreData.xcdatamodel, 可以圖形化的操作. 這類似用nib來創建界面.
建個工程, 使用coredata, 模擬器運行之后, 程序對應的document目錄出現一個CoreData.sqlite. 可以利用sqlite3命令來查看里面的表格結構
用命令行sqlite3 CoreData.sqlite 進入
- >.tables
- ZEVENT Z_METADATA Z_PRIMARYKEY
可以看到有表格ZEVENT, 對應的CoreData.xcdatamodel文件有名字叫Event的Entity
- >.schema ZEVENT
- CREATE TABLE ZEVENT ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZTIMESTAMP TIMESTAMP );
對應的Event中有屬性timeStamp, 可以看到, 相應的ZEVENT表格中有字段TIMESTAMP
- > select * from ZEVENT
- 1|1|1|306295807.974966
- 2|1|1|306295810.981875
- 3|1|1|306295811.982537
這表格有三個記錄, 可以用來初始化三個NSManagedObject, 修改了NSManagedObject, save之后也修改了表格記錄
你可以在CoreData.xcdatamodel添加新的entity, 之后用sqlit3命令來查看數據庫的變化
NSPersistentStoreCoordinator
這個類的對象通常用NSManagedObjectModel的對象來初始化, 這個類抽象出不同的存放方式, 最經常用的是NSSQLiteStoreType.
NSManagedObjectContext
這個類的對象又用NSPersistentStoreCoordinator的對象來初始化, 它里面有些方法來添加, 刪除NSManagedObject
NSFetchRequest
通常用NSEntityDescription來構造查詢, 也就指定查詢那個表格, 另外可以指定排序.
在CoreData的設計中, 下一層有相應的屬性指向上一層, 所以NSManagedObject有屬性得到NSEntityDescription, NSEntityDescription有屬性得到NSManagedObjectModel.
至于類
NSFetchedResultsController, 只是又封了一下, 和NSFetchRequest合起來使用, 方便取數據, 另外和NSManagedObjectContext關聯, 當數據庫發生變化的時候收到通知.
這文章只初步梳理了一下CoreData各類的關系, 各類的方法還需要一一研究. 文章最開始說CoreData是對sqlite數據庫的一個封裝, 不是嚴格的, CoreData不一定用sqlit來實現, 但他們之間確實有種對應關系.
小結:關于淺談iPhone中 CoreData 框架的內容介紹完了,希望本文對你有所幫助!