创建新项目,记得勾选Use Core Data,这样创建的项目,会多出一些不一样的东西。
在AppDelegate.h中,多了如下的代码
@property (readonly, strong) NSPersistentContainer *persistentContainer;
- (void)saveContext;
还多了一个后缀为xcdatamodeld的文件。
在.xcdatamodeld文件,点击下面的+(Add Entity)号,创建实体模型
创建完实体之后,他的模型文件就已经自动生成了,我们可以直接引用了。
再用的时候,我们需要引用模型的头文件,格式为模型名称+CoreDataClass,比如,我的模型名称是Person,那么,我们引用的文件名就是
#import "Person+CoreDataClass.h"
同时,我们需要用到AppDelegate中的方法和属性,需要引用AppDelegate
#import "AppDelegate.h"
然后定义两个属性,以及实现
@property(nonatomic, strong) AppDelegate *myApp;
@property(nonatomic, strong) NSManagedObjectContext *context;
self.myApp = (AppDelegate *)[UIApplication sharedApplication].delegate;
self.context = self.myApp.persistentContainer.viewContext;
我们可以做一些UI界面来进行测试。点击加号添加数据
- (IBAction)addAction:(id)sender {
// 描述文件
NSEntityDescription *des = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.context];
// 获取模型
Person *p = [[Person alloc] initWithEntity:des insertIntoManagedObjectContext:self.context];
// 给模型赋值
p.name = @"lhx";
p.age = arc4random() % 100 + 10;
// 数组添加数据
[self.dataArray addObject:p];
// 数据库保存数据
[self.myApp saveContext];
// 页面刷新
[self.tableView reloadData];
}
滑动删除数据
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// 删除数据源
Person *p = self.dataArray[indexPath.row];
[self.dataArray removeObject:p];
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
// 数据库删除
[self.context deleteObject:p];
// 数据库修改之后保存
[self.myApp saveContext];
}
}
刚刚进入页面的时候,查询数据
- (void)viewDidLoad {
[super viewDidLoad];
// 查询数据
NSFetchRequest *request = [Person fetchRequest];
// 设置排序
/**
key:实体中的参数
YES:正序 NO:逆序
*/
NSSortDescriptor *sortDes = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
request.sortDescriptors = @[sortDes];
// 3.执行查询请求
NSError *error = nil;
NSArray *arr = [self.context executeFetchRequest:request error:&error];
[self.dataArray addObjectsFromArray:arr];
}
当点击cell的时候,修改数据
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Person *p = self.dataArray[indexPath.row];
p.age = arc4random() % 100 + 10;
[self.dataArray replaceObjectAtIndex:indexPath.row withObject:p];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.myApp saveContext];
}
具体操作如下图