數(shù)據(jù)存儲(chǔ)之CoreData

CoreData基本概念

  • CoreData蘋果自己推出的數(shù)據(jù)存儲(chǔ)框架黍檩,以面向?qū)ο蠓绞絻?chǔ)存和管理數(shù)據(jù)(提供面向?qū)ο蟮慕涌冢苯硬僮鲗?duì)象怖喻,不必操作SQL語(yǔ)句)如孝。提供對(duì)象關(guān)系映射功能(ORM),可以將OC對(duì)象轉(zhuǎn)化為數(shù)據(jù)保存在SQLite3數(shù)據(jù)庫(kù)文件中常熙,也能將保存在數(shù)據(jù)庫(kù)中的數(shù)據(jù)還原成OC對(duì)象纬乍。官方支持,與iOS結(jié)合更緊密裸卫。

  • 可以實(shí)現(xiàn)多種文件格式: * NSSQLiteStoreType 仿贬、 * NSBinaryStoreType 、* NSInMemoryStoreType 彼城、* NSXMLStoreTyp诅蝶。

  • NSManagedObjectContext:
    托管對(duì)象上下文,直接負(fù)責(zé)數(shù)據(jù)的增刪改查

  • NSManagedObjectModel
    托管對(duì)象模型募壕,其中一個(gè)托管對(duì)象模型關(guān)聯(lián)到一個(gè)模型文件调炬,里面存儲(chǔ)著數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)。

  • NSPersistentStoreCoordinator
    持久化存儲(chǔ)協(xié)調(diào)器舱馅,主要負(fù)責(zé)協(xié)調(diào)上下文與存儲(chǔ)的區(qū)域的關(guān)系缰泡。

  • NSManagedObject
    托管對(duì)象類,托管對(duì)象都會(huì)繼承此類代嗤。被管理的數(shù)據(jù)記錄.

  • NSEntityDescription 獲取一張表對(duì)應(yīng)的entity

  • NSFetchRequest 查詢請(qǐng)求

  • NSPredicate 查詢的條件

  • NSSortDescriptor 查詢的排序條件

  • 關(guān)聯(lián)對(duì)象的分類中棘钞,@dynamic修飾變量,coredata會(huì)在運(yùn)行時(shí)將數(shù)據(jù)對(duì)象的屬性生成setter干毅、getter方法宜猜。自己寫該關(guān)鍵字,只是推到運(yùn)行時(shí)硝逢,沒(méi)實(shí)現(xiàn)會(huì)報(bào)錯(cuò)姨拥。

CoreData操作流程

1、首先創(chuàng)建一個(gè)coreData 模型文件:系統(tǒng)創(chuàng)建或者自己創(chuàng)建
2渠鸽、在data Model 中創(chuàng)建項(xiàng)目中需要用到的實(shí)體(Entities)叫乌,首字母大寫

Integer 16:代表整數(shù),范圍是-32768 ~ 32767

Integer 32:代表整數(shù)徽缚,范圍是-2147483648 ~ 2147483647

Integer 64:代表整數(shù)憨奸,范圍是–9223372036854775808 ~ 9223372036854775807,還是很大的凿试,較少用

3排宰、生成對(duì)應(yīng)實(shí)體的實(shí)體類(實(shí)體codegen改為manual似芝,codeGeneration下language改為oc)
4、自己創(chuàng)建模型文件時(shí)需要手動(dòng)生成上下文额各,關(guān)聯(lián)數(shù)據(jù)庫(kù)

//NSMainQueueConcurrencyType:代表主并發(fā)隊(duì)列類型国觉,如果在操作過(guò)程中,需要涉及到UI操作虾啦,則應(yīng)該使用這個(gè)參數(shù)初始化上下文完成操作麻诀。
//NSPrivateQueueConcurrencyType:代表私有并發(fā)隊(duì)列的類型,操作也是在子線程中完成的傲醉。
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] 
initWithConcurrencyType:NSMainQueueConcurrencyType];

5蝇闭、查詢語(yǔ)句

/* 謂詞的條件指令
     1.比較運(yùn)算符 > 、< 硬毕、== 呻引、>= 、<= 吐咳、!=
     例:@"number >= 99"
     
     2.范圍運(yùn)算符:IN 逻悠、BETWEEN
     例:@"number BETWEEN {1,5}"
     @"address IN {'shanghai','nanjing'}"
     
     3.字符串本身:SELF
     例:@"SELF == 'APPLE'"
     
     4.字符串相關(guān):BEGINSWITH、ENDSWITH韭脊、CONTAINS(模糊查詢)
     例:  @"name CONTAIN[cd] 'ang'"  //包含某個(gè)字符串
     @"name BEGINSWITH[c] 'sh'"    //以某個(gè)字符串開(kāi)頭
     @"name ENDSWITH[d] 'ang'"    //以某個(gè)字符串結(jié)束
     
     5.通配符:LIKE
     例:@"name LIKE[cd] '*er*'"   //*代表通配符,Like也接受[cd].
     @"name LIKE[cd] '???er*'"
     
     *注*: 星號(hào) "*" : 代表0個(gè)或多個(gè)字符
     問(wèn)號(hào) "?" : 代表一個(gè)字符
     
     6.正則表達(dá)式:MATCHES
     例:NSString *regex = @"^A.+e$"; //以A開(kāi)頭童谒,e結(jié)尾
     @"name MATCHES %@",regex
     
     注:[c]*不區(qū)分大小寫 , [d]不區(qū)分發(fā)音符號(hào)即沒(méi)有重音符號(hào), [cd]既不區(qū)分大小寫,也不區(qū)分發(fā)音符號(hào)沪羔。
     
     7. 合計(jì)操作
     ANY饥伊,SOME:指定下列表達(dá)式中的任意元素。比如蔫饰,ANY children.age < 18琅豆。
     ALL:指定下列表達(dá)式中的所有元素。比如篓吁,ALL children.age < 18茫因。
     NONE:指定下列表達(dá)式中沒(méi)有的元素。比如杖剪,NONE children.age < 18节腐。它在邏輯上等于NOT (ANY ...)。
     IN:等于SQL的IN操作摘盆,左邊的表達(dá)必須出現(xiàn)在右邊指定的集合中。比如饱苟,name IN { 'Ben', 'Melissa', 'Nick' }孩擂。
     
     提示:
     1. 謂詞中的匹配指令關(guān)鍵字通常使用大寫字母
     2. 謂詞中可以使用格式字符串
     3. 如果通過(guò)對(duì)象的key
     path指定匹配條件,需要使用%K
     
     */
    
    //創(chuàng)建查詢請(qǐng)求
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
    //查詢條件
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"sex = %@", @"美女"];
    request.predicate = pre;
 
    // 從第幾頁(yè)開(kāi)始顯示
    // 通過(guò)這個(gè)屬性實(shí)現(xiàn)分頁(yè)
    //request.fetchOffset = 0;
    // 每頁(yè)顯示多少條數(shù)據(jù)
    //request.fetchLimit = 6;
    //發(fā)送查詢請(qǐng)求
    NSArray *resArray = [_context executeFetchRequest:request error:nil];

6箱熬、數(shù)據(jù)遷移

凡是會(huì)引起NSManagedObjectModel托管對(duì)象模型變化的类垦,都最好進(jìn)行數(shù)據(jù)遷移狈邑,防止用戶升級(jí)應(yīng)用之后就閃退。
會(huì)引起NSManagedObjectModel托管對(duì)象模型變化的有以下幾個(gè)操作蚤认,新增了一張表米苹,新增了一張表里面的一個(gè)實(shí)體,新增一個(gè)實(shí)體的一個(gè)屬性砰琢,把一個(gè)實(shí)體的某個(gè)屬性遷移到另外一個(gè)實(shí)體的某個(gè)屬性里面…………

NSMigratePersistentStoresAutomaticallyOption = YES蘸嘶,那么Core Data會(huì)試著把之前低版本的出現(xiàn)不兼容的持久化存儲(chǔ)區(qū)遷移到新的模型中,
Core Data就能識(shí)別出是新表陪汽,就會(huì)更新為新表的存儲(chǔ)區(qū)训唱。
NSInferMappingModelAutomaticallyOption = YES,這個(gè)參數(shù)的意義是Core Data會(huì)根據(jù)自己認(rèn)為最合理的方式去嘗試MappingModel,
從源模型實(shí)體的某個(gè)屬性挚冤,映射到目標(biāo)模型實(shí)體的某個(gè)屬性况增。
只要打開(kāi)上面2個(gè)參數(shù),Core Data就會(huì)執(zhí)行自己的輕量級(jí)遷移了训挡。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末澳骤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子澜薄,更是在濱河造成了極大的恐慌为肮,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件表悬,死亡現(xiàn)場(chǎng)離奇詭異弥锄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蟆沫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門籽暇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人饭庞,你說(shuō)我怎么就攤上這事戒悠。” “怎么了舟山?”我有些...
    開(kāi)封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵绸狐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我累盗,道長(zhǎng)寒矿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任若债,我火速辦了婚禮符相,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己啊终,他們只是感情好镜豹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蓝牲,像睡著了一般趟脂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上例衍,一...
    開(kāi)封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天昔期,我揣著相機(jī)與錄音,去河邊找鬼肄渗。 笑死镇眷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翎嫡。 我是一名探鬼主播厌秒,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼秃嗜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼橙弱!你這毒婦竟也來(lái)了藕筋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤圈驼,失蹤者是張志新(化名)和其女友劉穎人芽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绩脆,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萤厅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了靴迫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惕味。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖玉锌,靈堂內(nèi)的尸體忽然破棺而出名挥,到底是詐尸還是另有隱情,我是刑警寧澤主守,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布禀倔,位于F島的核電站,受9級(jí)特大地震影響参淫,放射性物質(zhì)發(fā)生泄漏救湖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一涎才、第九天 我趴在偏房一處隱蔽的房頂上張望鞋既。 院中可真熱鬧,春花似錦、人聲如沸涛救。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)检吆。三九已至,卻和暖如春程储,著一層夾襖步出監(jiān)牢的瞬間蹭沛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工章鲤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摊灭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓败徊,卻偏偏與公主長(zhǎng)得像帚呼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子皱蹦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349