帮助您通过比较您的 JSON 字典和 Core Data 本地对象以过滤插入、删除和更新。它还针对您本地存储的对象提供去重,并自动删除找不到的对象。
public class func changes(changes: [[String : Any]],
inEntityNamed entityName: String,
localPrimaryKey: String,
remotePrimaryKey: String,
context: NSManagedObjectContext,
inserted: (JSON: [String : Any]) -> Void,
updated: (JSON: [String : Any], updatedObject: NSManagedObject) -> Void)
func importObjects(JSON: [[String : Any]], context: NSManagedObjectContext) {
DATAFilter.changes(JSON,
inEntityNamed: "User",
localPrimaryKey: "remoteID",
remotePrimaryKey: "id",
context: context,
inserted: { JSON in
let user = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: context)
user.fillObjectWithAttributes(JSON)
}) { JSON, updatedObject in
if let user = updatedObject as? User {
user.fillObjectWithAttributes(JSON)
}
}
}
localPrimaryKey
是本地主键的名称,例如 id
或 remoteID
。 remotePrimaryKey
是 JSON 中的键的名称,例如 id
。
使用谓词来过滤映射更改。例如,如果 JSON 响应只属于不活动的用户,则可以有一个类似于以下的谓词
let predicate = NSPredicate(format: "inactive == %@", true)
作为旁注,您应该使用一个 更复杂的属性映射器,该映射器为您完成 fillObjectWithAttributes
部分的工作。
DATAFilter
还提供了设置过滤时应运行哪些操作的选项。默认情况下使用 .All
,但您也可以将选项设置为仅 .Insert
和 .Update
(避免删除项)或 .Update
和 .Delete
(避免更新项)。
用法如下
DATAFilter.changes(JSONObjects,
inEntityNamed: "User",
predicate: nil,
operations: [.Insert, .Update],
localPrimaryKey: "remoteID",
remotePrimaryKey: "id",
context: backgroundContext,
inserted: { JSON in
// Do something with inserted items
}, updated: { JSON, updatedObject in
// Do something with updated items
})
iOS 7.0
,Core Data
DATAFilter 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'DATAFilter'
SyncDB,[email protected]
DATAFilter 在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。