美文网首页
CoreData第一课

CoreData第一课

作者: 贼海鸥 | 来源:发表于2021-05-26 17:09 被阅读0次

    创建新项目,记得勾选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第一课

          本文链接:https://www.haomeiwen.com/subject/fhicsltx.html