什么是CoreData?
CoreData是iOS5之后,苹果原生的用于对象化管理数据,并且持久化的框架。
CoreData的原理是什么?
CoreData的技术堆栈是CoreData Stack,主要包括
NSManagedObjectContext 对象管理上下文: 负责管理模型的对象的集合
NSManagedObjectModel 被管理的对象模型: 负责管理对象模型
NSPersistentStoreCoordinator 存储调度器: 负责将数据保存到磁盘的
它们三个之间的关系,大概如下:
CoreData的增删改查,大家都已经熟悉,这里主要介绍的是NSFetchedResultsController与CoreData的混用。NSFetchedResultsController是用来管理查询结果的功能类控制器,为TableView而生。
NSFetchedResultsController如何与tableView关联?
通过在tableView数据源的方法来取出数据来给cell的属性赋值。
id<NSFetchedResultsSectionInfo> info = self.fetchController.sections[indexPath.section];
//取出数据
Contect *contect = [info objects][indexPath.row];
cell.textLabel.text = contect.name;
cell.detailTextLabel.text = contect.phoneNum;
NSFetchedResultsController的代理有很多:
controller didChangeObject:atIndexPath: forChangeType: newIndexPath:(控制器里的模型对象发生改变时调用,会告诉你之前和之后的索引,改变类型(插入/移动/删除等)
controller:didChangeSection:atIndex:forChangeType:(对象模型section改变时调用)
只要运用得当,会大大提高编码效率。
CoreData有个直接获取对应objectID的数据,不过一定要在储存之后调用,因为每次储存后,objectID都会改变.
先保存objectID
self.objectID = [p objectID];p为需要对象
之后就可以根据这个objectID去获取p了。
网上对清空CoreData的存储的数据,方法很多,下面提出一个快捷方法,不知道会不会引起大问题,如果有,请友情提醒。
流行的思路是全部查找,然后删除。当数据量大时,这样效率会比较低;所以可以试试直接把表或者数据库全删除了。再重建一个名字,路径一样的数据库。亲测比较快。
下面附上代码链接。
下载麻烦点个星
本文为原创,转载请注明出处。