我已经成功地在应用程序中实现了核心数据。一切正常,但我遇到了问题。我正在使用合并策略来更新记录。 我有两个实体,名称为问题和成员,它们之间存在一对多的关系。一期有很多成员。
数据来自服务器,并保存在以下两个实体中:
Object A
Object B
Object C
该数据是首次出现并保存在coredata中。服务器上的数据更新,并且在第二次获取数据时,会出现以下数据:
Object A
Object B
它应该更新和删除对象C,但是对象C 仍在核心数据中。 请帮助我我在这里做错了。预先感谢。
这是我的代码:
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)")
}
}
答案 0 :(得分:1)
我进行了一点调查,发现没有一个合并策略能够满足您的需求:在存在唯一性约束的情况下,NSRollbackMergePolicy
和NSOverwriteMergePolicy
都仅保存旧的(存在于持久性存储中)对象集在关系中,NSMergeByPropertyStoreTrumpMergePolicy
和NSMergeByPropertyObjectTrumpMergePolicy
将所有对象以两个版本(在磁盘和内存中)保存为具有关系的对象。看来您必须自己管理这种关系...