ios--浅谈CoreData+源代码

一、coreData的优缺点

1.优点:  Core Data实际上是将数据库的创建、表的创建、对象和表的转换等操作封装起来,极大的简化了我们的操作。Core Date与SQLite相比较,SQLite比较原始,操作比较复杂,使用的是C的函数对数据库进行操作,但是SQLite可控性更强,并且能够跨平台;

2.缺点:存储性能一般,默认建立的表没有主键,效率低;

二、以代码的形式展示Coredata的增、删、改、查

1、查

//声明一个APPDeletegate对象属性,来调用类中属性
    self.delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    //进来时先查询数据库中是否有数据
    //查询对象NSFetchRequest
    NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Pen"];
    //设置排序
    //创建排序描述对象  我们来个按价格的升序来排列
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"price" ascending:YES];
    request.sortDescriptors = @[sortDescriptor];
    //执行查询
   NSArray *resultArray = [self.delegate.managedObjectContext executeFetchRequest:request error:nil];
    //往数据源添加数据
    [self.dataArray addObjectsFromArray:resultArray];

2、增

 NSEntityDescription *description = [NSEntityDescription entityForName:@"Pen" inManagedObjectContext:self.delegate.managedObjectContext];
    //插入数据
    Pen *pen = [[Pen alloc]initWithEntity:description insertIntoManagedObjectContext:self.delegate.managedObjectContext];
    
    pen.name = @"英雄";
    pen.price = [NSNumber numberWithInt:arc4random()%200 + 5];
    //插入数据源数组
    [self.dataArray addObject:pen];
    //插入到UI
    [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:self.dataArray.count - 1 inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
    
    //对数据管理器的更改 进行永久存储
    [self.delegate saveContext];

3.删

  //删除数据源
        Pen *pen = self.dataArray[indexPath.row];
        [self.dataArray removeObject:pen];
        //删除数据管理器中的数据
        [self.delegate.managedObjectContext deleteObject:pen];
        //将进行的更改永久保存
        [self.delegate saveContext];
        
        //删除单元格
        [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

4.改

 //先找到model
    Pen *pen = self.dataArray[indexPath.row];
    pen.name = @"跃哥";
    pen.price = [NSNumber numberWithInt:100];
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    [self.delegate saveContext];
    //数据永久保存

三、数据库的升级

  比如说某个项目的存储数据的模型中需要添加一个字段,在不改变原来数据的情况下,也就是模型版本的迁徙,首先选择可视化建模文件→Editor→Add Model Version (创建模型版本)创建新的model版本→ 右边属性检查器的第一个标签下面的Model Version (选择我们创的新的model)→在新的模型版本中添加字段 →创建映射文件(选择添加文件Coredata中第二个)→选择我们新的模型版本→在APPdelegate中将[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]  中的options的nil修改为@{NSMigratePersistentStoresAutomaticallyOption:@YES}自动升级,然后将老的模型删除,重新添加新的模型,这样就完成啦

切记:我们添加字段一定要在新的模型中添加,代码链接已附上http://download.csdn.net/detail/wang_yuewen/9759103

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值