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