结构流程
一、创建一个coreData应用
1、新建工程,记得勾选Use Core Data
2.AppDelegate.h 的注释
3.CoreDataTest.xcdatamodeld
4.选择 CoreDataTest.xcdatamodeld文件建模
二、运用 做增删改查处理
//声明一个AppDelegate对象属性,来调用类中的属性,比如被管理对象上下文
@property (nonatomic ,strong)AppDelegate *myAppDelegate;
1.增添数据
// barbuttonIt
-(IBAction)addModel:(id)sender
{
//插入数据 创建实体描述对象
NSEntityDescription * description = [NSEntityDescription entityForName:@"Clothes" inManagedObjectContext:self.myAppDelegate.managedObjectContext];
//1.先创建一个模型对象
Clothes * cloth = [[Clothes alloc]initWithEntity:description insertIntoManagedObjectContext:self.myAppDelegate.managedObjectContext];
cloth.name = @"Puma";
int price = arc4random()%1000+1;
cloth.price = [NSNumber numberWithInt:price];
cloth.type = price>500?@"女装":@"男装";
//插入数据原数组
[self.dataSource addObject:cloth];
//插入UI
[self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:self.dataSource.count - 1 inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
//对数据管理器中的更改,进行永久存储
[self.myAppDelegate saveContext];
}
2.删除数据
Clothes *cloth = self.dataSource[indexPath.row];
[self.dataSource removeObject:cloth];
//删数据管理器中的数据
[self.myAppDelegate.managedObjectContext deleteObject:cloth];
//将进行更改过后的永久保存
[self.myAppDelegate saveContext];
//删除单元格 UITableViewRowAnimationFade 减淡动画
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
3.改数据
// 1.先找到模型对象
Clothes * cloth = self.dataSource[indexPath.row];
if ([cloth.name isEqualToString:@"Puma"])
{
cloth.name = @"adidas";
}
else
{
cloth.name = @"NIKE";
}
//刷新UI 单元格
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
//永久保存
[self.myAppDelegate saveContext];
4.查询数据
//初始化数组
self.dataSource = [NSMutableArray array];
self.myAppDelegate = [UIApplication sharedApplication].delegate;
//查询数据
// 1, NSFetchRequest
NSFetchRequest * request = [[NSFetchRequest alloc]initWithEntityName:@"Clothes"];
//2.设置排序
//2.1 创建排序描述对象 (根据什么排序 升序、绛序) 多个排序对象
NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"price" ascending:YES];
request.sortDescriptors = @[sortDescriptor];
//执行这个查询请求
NSError * error = nil; //查询错误信息
NSArray * result = [self.myAppDelegate.managedObjectContext executeFetchRequest:request error:&error];
//给数据源数组添加数据
[self.dataSource addObjectsFromArray:result];
三、版本控制
1.选择 CoreDataTest.xcdatamodeld文件 点击
2..选择 CoreDataTest.xcdatamodeld文件 选择当前创建的新版本
3.创建映射文件
第一步选择老的模型版本,第二步选择老的模型文件
4.更改AppDelegate.m文件
在- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 方法中添加代码
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES],NSInferMappingModelAutomaticallyOption, nil];
带入options
5.把老的可视化建模的model类删除,选择 CoreDataTest.xcdatamodeld文件创建新的model 方法同上1.4