一、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