Core Data 批量更新(iOS 8 特性)
来源:互联网 发布:居住证 知乎 编辑:程序博客网 时间:2024/06/11 07:32
不做查询,直接在Store层进行更新,iOS 8 的特性。
举例一种情况,如果我们要对十万条数据都进行同样的一个属性的更新,一般的做法我们需要取出这十万条数据,我们取出十多万条数据只是为了做一个很简单的更新。
经典的案例是电子邮箱类似的APP中 标记所有邮件为已读
这样的需求,难道要把上千封邮件全部请求出来吗,显然不是。
iOS 8 发布了支持 批量更新(Bench Update)
的 NSBatchUpdateRequest
,使用它可以在不做查询的情况下更新数据。
NSBatchUpdateRequest 实现的原理是完全绕开了 NSManagedObjectContext,直接去 NSPersistentStore 层去做 Update。
//这四行代码,在初始化的时候配置好EntityName, 配置影响的property和更改的值 以及 配置影响的Store,以及返回Result的数据类型。 //创建NSBatchUpdateRequest 的实例,entityName 作为初始化参数。 let batchUpdate = NSBatchUpdateRequest(entityName: "myEntityName") //标明需要 Update 的 property 和 值 batchUpdate.propertiesToUpdate = ["favorite" : NSNumber(bool: true)] //被影响的Stores 默认情况下这么写就可以,如果涉及比较多的PersistentStores 情况就更复杂了。 batchUpdate.affectedStores = coreDataStack.context.persistentStoreCoordinator!.persistentStores //配置返回数据的类型,还可以是 UpdatedObjectIDsResultType。 batchUpdate.resultType = .UpdatedObjectsCountResultType //执行批量更新 do { let batchResult = try coreDataStack.context.executeRequest(batchUpdate) as! NSBatchUpdateResult print("Records updated \(batchResult.result!)") } catch let error as NSError { print("Could not update \(error), \(error.userInfo)") }
在初始化的时候配置好EntityName, 配置影响的property和更改的值 以及 配置影响的Store,以及返回Result的数据类型。
另外提一下:如同这种在 Store 层的数据更新,数据删除也有同样的API,在 iOS 9 的时候苹果提供了一个类似 NSBatchUpdateRequest 的类来做在 Store 层的数据删除,使用 —- NSBatchDeleteRequest
,同样它们两个都是 NSPersistentStoreRequest
的子类。
注意:
额外需要注意的一点是,前面提到了「NSBatchUpdateRequest 实现的原理是完全绕开了 NSManagedObjectContext,直接去 NSPersistentStore 层去做 Update。」
所以做了批量 Update / Delete 之后,你之前请求的那部分数据已经失效了,因为它们跟数据库已经失去了同步性。
- Core Data 批量更新(iOS 8 特性)
- Core Data 异步查询(iOS 8 特性)
- iOS Swift教程 Core Data (一)Hello Core Data
- IOS开发(96)之Core Data
- IOS Core Data 使用(三)
- iOS 之Core Data操作(一)
- iOS 之core Data操作(二)
- iOS 之core Data操作(三)
- Core Data in IOS
- IOS Core Data
- [ios]Core Data
- Core Data-iOS
- IOS 中 Core Data
- #iOS# Core Data基础
- iOS Core Data 用法
- iOS Core Data
- iOS Core Data
- iOS Core Data-多线程
- PullToRefreshListView 应用讲解
- linux 多线程
- 如何让iOS 保持界面流畅
- 通过RTMP协议将AVC(H264)数据发送到流媒体服务器
- 可拖动和删除动画的ListView
- Core Data 批量更新(iOS 8 特性)
- 数组根据数组中字典的value值排序
- 江湖家政O2O服务系统 手机端界面大曝光
- Util Yeoman
- java 流操作
- [KDD,ML]奇异值分解(SVD)的物理意义
- struts2: config-browser-plugin 与 convention-plugin 学习
- MPICH 安装
- NSUrlSession 网络会话介绍