我已经在我的应用程序中成功实现了核心数据。一切工作正常,但我遇到了问题。我正在使用合并策略来更新记录。 我有两个名为 Issues 和 Members 的实体,具有一对多的关系。一期有多个成员。
数据来自服务器并保存在这两个实体中:
Object A
Object B
Object C
该数据是第一次出现并保存在 coredata 中。服务器上的数据更新,第二次获取时,此数据出现:
Object A
Object B
它应该更新并删除对象 C,但对象 C 仍在 coredata 中。 请帮助我我在这里做错了什么。提前致谢。
这是我的代码:
private class func getContext() -> NSManagedObjectContext {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.persistentContainer.viewContext
}
class func saveIssues(with json: JSON)
{
let context = getContext()
let entity = NSEntityDescription.entity(forEntityName: "Issues", in: context)
let issue = NSManagedObject(entity: entity!, insertInto: context) as! Issues
issue.setValue(json["Id"].stringValue, forKey: "id")
issue.setValue(json["Name"].stringValue, forKey: "name")
issue.setValue(json["CreatedByName"].stringValue, forKey:"createdByName")
for issueMembers in json["Members"].arrayValue
{
let members = NSEntityDescription.insertNewObject(forEntityName: "Members", into: context) as! Members
members.setValue(issueMembers["FullName"].stringValue, forKey: "fullName")
members.setValue(issueMembers["PictureUrl"].stringValue, forKey: "picture_Url")
members.setValue(issueMembers["LoginId"]. stringValue, forKey: "loginId")
issue.addToIssueMembers(members)
}
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
do{
try context.save()
}catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
最佳答案
我调查了一下,发现没有一个合并策略适合您的需求:在唯一性约束的情况下,NSRollbackMergePolicy
和 NSOverwriteMergePolicy
仅保存旧的(存在于持久存储)关系中的对象集,并且 NSMergeByPropertyStoreTrumpMergePolicy
和 NSMergeByPropertyObjectTrumpMergePolicy
都以两个版本(在磁盘上和内存中)保存该对象具有的关系中的所有对象。所以看来你必须自己处理这种关系......
关于ios - 核心数据合并政策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51464249/