CoreData第一课

创建新项目,记得勾选Use Core Data,这样创建的项目,会多出一些不一样的东西。
在AppDelegate.h中,多了如下的代码

@property (readonly, strong) NSPersistentContainer *persistentContainer;

- (void)saveContext;

还多了一个后缀为xcdatamodeld的文件。
在.xcdatamodeld文件,点击下面的+(Add Entity)号,创建实体模型


图1

创建完实体之后,他的模型文件就已经自动生成了,我们可以直接引用了。
再用的时候,我们需要引用模型的头文件,格式为模型名称+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];
}

具体操作如下图


效果图

你可能感兴趣的:(CoreData第一课)