一、CoreData的增刪改查
提前總結(jié):
(1)在每次執(zhí)行四個(gè)操作的時(shí)候,要首先保證上下文存在(還活著)。
(2)'增':創(chuàng)建保存對象部分,不是直接new或者 alloc-init。
(3)'改':'刪':'查':NSPredicate 過濾條件(精確和非精確)。
上篇文章中已經(jīng)貼出了創(chuàng)建上下文的簡單代碼。
coreData操作-增(插入)
//插入數(shù)據(jù)
Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:self.context];
student.name = self.nameText.text;
student.timeCreate = [NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterLongStyle timeStyle:NSDateFormatterLongStyle];
//保存
NSError *error = nil;
BOOL success = [self.context save:&error];
if (!success) {
[NSException raise:@"訪問數(shù)據(jù)庫錯誤" format:@"%@",[error localizedDescription]];
}
coreData操作-查
iOS中的謂詞(NSPredicate)使用
iOS學(xué)習(xí)之NSPredicate
// 初始化一個(gè)查詢請求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 設(shè)置要查詢的實(shí)體
request.entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managedContext];
//以上代碼簡寫成下邊
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//也可以簡寫為
NSFetchRequest *request = [Student fetchRequest];
//執(zhí)行請求
NSError *error = nil;
//請求到的是全部student
NSArray *students = [self.context executeFetchRequest:request error:&error];
if (error) {
[NSException raise:@"查詢錯誤" format:@"%@", [error localizedDescription]];
}else{
Student *stu = [students lastObject];
self.hintLabel.text = [NSString stringWithFormat:@"添加了一個(gè)學(xué)生,名字是%@,id是%zd",stu.name,stu.idNum];
}
//超簡單謂詞,根據(jù)姓名查詢
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//設(shè)置過濾條件
NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"李四2"];
request.predicate = pre;
NSError *error = nil;
NSArray *objs = [self.managedContext executeFetchRequest:request error:&error];
if (error) {
[NSException raise:@"查詢錯誤" format:@"%@", [error localizedDescription]];
}
// 2.更新名字
for (Student *stu in objs) {
stu.name = @"被修改的新名字";
}
//保存,用 save 方法
BOOL success = [self.managedContext save:&error];
if (!success) {
[NSException raise:@"訪問數(shù)據(jù)庫錯誤" format:@"%@",[error localizedDescription]];
}
coreData操作-刪
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//查到到你要刪除的數(shù)據(jù)庫中的對象
NSPredicate *predic = [NSPredicate predicateWithFormat:@"name = %@",@"張三2"];
request.predicate = predic;
//請求數(shù)據(jù)
NSArray *objs = [self.managedContext executeFetchRequest:request error:nil];
for (Student *stu in objs) {
[self.managedContext deleteObject:stu];
}
[self.managedContext save:nil];
二、對CoreData使用的封裝 -> CoreDataHelper
我是絕對絕對不會告訴你上邊的這段代碼是我從AppDelegate.m中將有關(guān)CoreData的部分剪貼出來生成新的CoreDataHelper類的。
這里簡單寫了一個(gè)demo,用CoreDataHelper增刪改查操作。
點(diǎn)我下載Demo