NSManagedObject:对象类(Person)
NSEntityDescription:描述实体属性的类(age,gender),这些属性都是对象
NSManagedObjectModel:数据模型类(心形)
NSPersistentStoreCoordinator:数据连接器类,负责连接源数据(相当于搬运工)
NSManagedObjectContext:数据管理器类 ,增、删、改、查都要用该类,保存修改后的值(记录)(相当于老板,负责指挥)承上启下
//coreData的用法
1.创建一个新工程,将coreData那一项勾选
2.点击coreDataTest.xcdatamodeld,创建一个实体
3.command+N在iOS的coreData->NSManagedObject subclass创建实体和描述属性
4.给要创建实体类下打钩,一直点确定,则会出现四个文件,实体类创建成功
5.AppDelegate类中会出现coreData相应需要用的对象
6.创建实体对象(增加)
//创建student对象
//创建描述类对象
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managedObjectContext];
//创建实体对象
_student = [[Student alloc] initWithEntity: entityDescription insertIntoManagedObjectContext:self.managedObjectContext];
//设置属性
_student.name = @"李大泽";
_student.age = [NSNumber numberWithInt:18];
_student.sex = @"男";
_student.address = @"dffffaewwf";
//保存操作,该方法是AppDelegate方法中定义的保存方法
[self saveContext];
//获取AppDelegate里面的被管理对象上下文
//获取AppDelegate对象
_appdelegate = [UIApplication sharedApplication].delegate;
//获取被管理对象上下文
_context = _appdelegate.managedObjectContext;
7.查询
有代码片段,不需要自己打:fetch...
//搜索类
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
//实体描述类
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:_context];
[fetchRequest setEntity:entity];
//查找条件(此处可省略)
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",@"李大泽"];
// [fetchRequest setPredicate:predicate];
//
//排序(按年龄升序排序)
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];
//执行查询请求
//此时查找的数据都存在fetchedObjects该数组中
NSError *error = nil;
NSArray *fetchedObjects = [_context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
NSLog(@"查找失败");
}
else{
//将获得的学生数组给数组
//方法一:此时相当于拷贝了一份给array
[self.array addObjectsFromArray:fetchedObjects];
//方法二:此时array和fetchedObjects指向一个空间,不安全
// self.array = (NSMutableArray *)
// fetchedObjects;
//取出数组里面的Student对象
Student *s = fetchedObjects[0];
NSLog(@"查找成功,查找到学生,姓名:%@,性别:%@,年龄:%@,地址:%@",s.name,s.sex,s.age,s.address);
//NSLog(@"查找到的学生数组是:%@",fetchedObjects);
}
//修改
//获取要修改的学生对象
Student *s = _array[0];
s.name = @"玛利亚";
s.age = [NSNumber numberWithInt:10];
s.sex = @"未知";
//保存操作
//方法一:直接用上下文对象的保存方法
[self.context save:nil];
//方法二:用AppDelegate的保存方法
// [_appdelegate saveContext];
//查找修改后的学生对象信息
[self searchStudent:nil];
//删除
//查找到要删除的学生
Student *deleteStu = _array[0];
//删除学生
[_context deleteObject:deleteStu];
//保存操作
[self.context save:nil];
NSLog(@"删除成功");
}