CoreData不是一种存储形式 属于中间的协调者
1. 懒加载:
重写getter方法,在变量使用的时候创建
(很好的写法)
#pragma mark --- 懒加载:
- (NSManagedObjectContext *)managedObjectContext {
if (!_managedObjectContext) {
// 获取当前的appDelegate
AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
_managedObjectContext = appDelegate.managedObjectContext;
}
return _managedObjectContext;
}
2. CoreData增删改查:
NSEntityDescription:实体描述
NSManagedObjectContext 托管上下文
NSManagedObjectModel :托管模型
NSPersistentStoreCoordinator:持久化存储协调器
#pragma mark --- 添加:
- (IBAction)addModel:(UIButton *)sender {
// 1. 创建:实体描述
NSEntityDescription *des = [NSEntityDescription entityForName:@"Teacher" inManagedObjectContext:self.managedObjectContext];
// 2. 创建实体:使用实体描述创建
Teacher *teacher = [[Teacher alloc] initWithEntity:des insertIntoManagedObjectContext:self.managedObjectContext];
// 3. 赋值
teacher.name = self.nameText.text;
NSNumber *age = [NSNumber numberWithInteger:[self.ageText.text integerValue]];
teacher.age = age;
// 4. 保存到本地
[self.managedObjectContext save:nil];
}
#pragma mark --- 删除:
- (IBAction)deleteModel:(UIButton *)sender {
NSArray *array = [self teacherFetch];
for (Teacher *t in array) {
if ([t.age isEqual:@14]) {
[self.managedObjectContext deleteObject:t];
}
}
[self.managedObjectContext save:nil];
}
#pragma mark --- 修改:
- (IBAction)alterModel:(UIButton *)sender {
NSArray *array = [self teacherFetch];
// 2. 遍历查询结果:是否满足修改条件
for (Teacher *t in array) {
if ([t.name isEqualToString:@"1"]) {
// 修改数据
t.name = @"哦呵呵呵。。";
t.age = @14;
}
}
// 修改完成,保存到本地
[self.managedObjectContext save:nil];
}
#pragma mark --- 查询:
- (IBAction)queryModel:(UIButton *)sender {
NSArray *teacherArray = [self teacherFetch];
// 3. 遍历打印
for (Teacher *t in teacherArray) {
NSLog(@"%@ %@", t.name, t.age);
}
}
#pragma mark --- 封装查询遍历方法:
- (NSArray *)teacherFetch {
// 1.创建:查询请求
NSFetchRequest *teacherFR = [[NSFetchRequest alloc] initWithEntityName:@"Teacher"];
// 2.查询结果 :数组接收
NSArray *teacherArray = [self.managedObjectContext executeFetchRequest:teacherFR error:nil];
return teacherArray;
}
修改 删除都是基于查询executeFetchRequest
每次写完都要保存到本地:[self.managedObjectContext save:nil];
2. CoreData 多表操作:
实现版本迭代:
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSIgnorePersistentStoreVersioningOption:@YES} error:&error])
需要将options:后面的参数改为字典: @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSIgnorePersistentStoreVersioningOption:@YES}