【发布时间】:2018-07-22 10:37:22
【问题描述】:
我已经成功地在我的应用程序中实现了核心数据。一切正常,但我遇到了问题。我正在使用合并策略来更新记录。 我有两个实体名称 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)")
}
}
【问题讨论】:
-
添加一些代码来展示你如何处理更新。还要描述您使用的托管对象上下文集(您是否在任何地方设置了父上下文?何时保存上下文?)
-
@AntonFilimonov 我已经编辑了我的问题。请查看我的代码。请帮助我在这里做错了什么。谢谢
-
我没有看到任何代码可以删除不再需要的对象。您是否使用任何唯一性约束?
-
@AntonFilimonov 我正在使用唯一约束。问题中的“Id”和成员中的“loginId”是唯一约束。
-
@AntonFilimonov 我认为使用合并策略的目的是不再检查更新、删除。它处理这些操作。