【進(jìn)階篇】iOS coreData簡單使用教程

CoreData相當(dāng)于一個(gè)綜合的數(shù)據(jù)存儲(chǔ)和管理中心,它支持sqlite峦耘,二進(jìn)制存儲(chǔ)文件兩種形式的數(shù)據(jù)存儲(chǔ)贡歧。而CoreData提供了存儲(chǔ)管理赋秀,包括查詢猎莲、插入著洼、
刪除、更新豹悬、回滾瞻佛、會(huì)話管理伤柄、鎖管理等一系列數(shù)據(jù)庫操作文搂。另外,開發(fā)者還可以在xcode中使用 .xcdatamodel 擴(kuò)展名的文件笔喉,以圖形化的形式編輯數(shù)據(jù)模型,這里包括了
Entities贫途、Properties、Attributes姨裸、Relationships四個(gè)概念,這里跟關(guān)系型數(shù)據(jù)庫有很大的相似點(diǎn)那先。

我更覺得它的使用方法更像是.net中的EF框架或者java里面的Hibernate,操作對(duì)象使其變成永久化數(shù)據(jù)售淡,這個(gè)狀態(tài)的數(shù)據(jù)稱之為“游離態(tài)”


話不多說揖闸,看看如果使用

1料身、新建一個(gè)工程
image1
2贮泞、選擇使用coredata
image2
新建好了之后啃擦,在AppDelegate.h文件中會(huì)多出這些東西
image3
AppDelegate.m文件中會(huì)有一堆,這些都是系統(tǒng)生成的
image4

image5

image6
3、然后進(jìn)入xcdatamodeld文件中添加實(shí)體和屬性
image7
4运杭、添加完實(shí)體之后辆憔,再去添加對(duì)應(yīng)的實(shí)體類文件
image8
選擇xcdatamodeld文件
image9
選擇實(shí)體
image10
下一步創(chuàng)建好了會(huì)多出四個(gè)文件熊榛,兩個(gè)是分類玄坦,兩個(gè)是實(shí)體名字煎楣,屬性在分類文件中择懂,實(shí)體文件中并沒有屬性定義困曙,是以分類的形式擴(kuò)展出來的屬性
image11

到此谦去,準(zhǔn)備工作就做好了

以下操作我們都可以使用可視化工具來查看慷丽,先用以下代碼打印沙盒目錄

<pre><code class='Xcode'>
NSLog(@"沙盒路徑為:%@",NSHomeDirectory());
</code></pre>

復(fù)制打印的目錄,打開Finder哪轿,前往=>前往文件夾盈魁,粘貼剛剛復(fù)制的目錄,進(jìn)入沙盒目錄
image13
進(jìn)入Doucuments目錄,使用Sqlite Professional這個(gè)工具打開.sqlite文件
image14

image15
image15
這里生成的表和字段都會(huì)以Z開頭窃诉,還會(huì)多出一些字段杨耙,這個(gè)不用在意,我們自己添加的字段在就好了
image15
選擇表飘痛,點(diǎn)擊Data選項(xiàng)查看數(shù)據(jù)
image15
image15

下面開始增刪改查珊膜,以下操作均在ViewController中完成

<pre><code class='Xcode'>
//獲取上下文對(duì)象
NSManagedObjectContext *context = [[AppDelegate alloc]init].managedObjectContext;
//創(chuàng)建一個(gè)對(duì)象
SBuser *user = [NSEntityDescription insertNewObjectForEntityForName:@"SBuser" inManagedObjectContext:context];
user.userid = [NSString stringWithFormat:@"%ld",_number++];
user.username=@"methodname";
user.userage = @"15";
user.usersex = @"男";
//保存
[context save:nil];

</code></pre>

<pre><code class='Xcode'>
//獲取上下文對(duì)象
NSManagedObjectContext *context = [[AppDelegate alloc]init].managedObjectContext;
//創(chuàng)建提取器
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"SBuser"];
//設(shè)置條件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userid=2"];
request.predicate = predicate;
//查詢
NSArray *ary = [context executeFetchRequest:request error:nil];
//遍歷輸入結(jié)果
for (SBuser *user in ary)
{
NSLog(@"%@%@%@__%@",user.userid,user.username,user.usersex,user.userage);
}

</code></pre>

<pre><code class='Xcode'>
//獲取上下文對(duì)象
NSManagedObjectContext *context = [[AppDelegate alloc]init].managedObjectContext;
//創(chuàng)建提取器
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"SBuser"];
//設(shè)置條件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userid=2"];
request.predicate = predicate;
//查詢
NSArray *ary = [context executeFetchRequest:request error:nil];
//遍歷輸入結(jié)果
for (SBuser *user in ary)
{
//將對(duì)象的username屬性修改為 張三
NSLog(@"%@%@%@__%@",user.userid,user.username,user.usersex,user.userage);
user.username = @"張三";
}
//保存
[context save:nil];
</code></pre>

<pre><code class='Xcode'>
//獲取應(yīng)用程序代理以及上下文對(duì)象
AppDelegate *app = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *context = app.managedObjectContext;
//創(chuàng)建提取器
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"SBuser"];
//設(shè)置查詢條件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userid=1"];
request.predicate = predicate;
//查詢
NSArray *array = [context executeFetchRequest:request error:nil];
//遍歷查詢結(jié)果輸出
for (SBuser *user in array)
{
NSLog(@"%@%@%@__%@",user.userid,user.username,user.usersex,user.userage);
}
//遍歷查詢結(jié)果刪除
if (array && array.count > 0)
{
for (SBuser *ett in array)
{
//刪除對(duì)象
[[app managedObjectContext] deleteObject:ett];
}
//保存
[app saveContext];
}

</code></pre>


到此塑陵,coredata的一些簡單操作基本上就差不多了阻桅,這里需要注意的是,在系統(tǒng)生成的Appdelegate.m文件中趟章,并沒有實(shí)現(xiàn)解決數(shù)據(jù)遷移的問題柬祠,所有還需要在此處添加一段,將options這個(gè)選項(xiàng)添加到下面這個(gè)地方去莽龟,若不解決數(shù)據(jù)遷移的問題,如果在后繼的版本中改動(dòng)過表里的字段

將會(huì)在用戶從舊版本升級(jí)新版本時(shí)無法打開應(yīng)用程序!D缘臁!

image

END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祷杈,一起剝皮案震驚了整個(gè)濱河市陡厘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖揉抵,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茂缚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡讲岁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事惜浅。” “怎么了挣轨?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵晤锹,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任狱意,我火速辦了婚禮,結(jié)果婚禮上隆箩,老公的妹妹穿的比我還像新娘兜材。我一直安慰自己掏击,他們只是感情好殴玛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布署尤。 她就那樣靜靜地躺著硝烂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天垦江,我揣著相機(jī)與錄音衩藤,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼来屠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤店茶,失蹤者是張志新(化名)和其女友劉穎丛楚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體功茴,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年惶凝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了混滔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肺魁。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤悍引,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布奋渔,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏升略。R本人自食惡果不足惜翰撑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦萄金、人聲如沸孙乖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纱新。三九已至簿废,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像笛谦,于是被迫代替她去往敵國和親轩娶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子许溅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容