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è)工程
2贮泞、選擇使用coredata
新建好了之后啃擦,在AppDelegate.h文件中會(huì)多出這些東西
AppDelegate.m文件中會(huì)有一堆,這些都是系統(tǒng)生成的
3、然后進(jìn)入xcdatamodeld文件中添加實(shí)體和屬性
4运杭、添加完實(shí)體之后辆憔,再去添加對(duì)應(yīng)的實(shí)體類文件
選擇xcdatamodeld文件
選擇實(shí)體
下一步創(chuàng)建好了會(huì)多出四個(gè)文件熊榛,兩個(gè)是分類玄坦,兩個(gè)是實(shí)體名字煎楣,屬性在分類文件中择懂,實(shí)體文件中并沒有屬性定義困曙,是以分類的形式擴(kuò)展出來的屬性
到此谦去,準(zhǔn)備工作就做好了
以下操作我們都可以使用可視化工具來查看慷丽,先用以下代碼打印沙盒目錄
<pre><code class='Xcode'>
NSLog(@"沙盒路徑為:%@",NSHomeDirectory());
</code></pre>
復(fù)制打印的目錄,打開Finder哪轿,前往=>前往文件夾盈魁,粘貼剛剛復(fù)制的目錄,進(jìn)入沙盒目錄
進(jìn)入Doucuments目錄,使用Sqlite Professional這個(gè)工具打開.sqlite文件
這里生成的表和字段都會(huì)以Z開頭窃诉,還會(huì)多出一些字段杨耙,這個(gè)不用在意,我們自己添加的字段在就好了
選擇表飘痛,點(diǎn)擊Data選項(xiàng)查看數(shù)據(jù)
下面開始增刪改查珊膜,以下操作均在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缘臁!
END