核心数据合并政策

时间:2018-07-22 10:37:22

标签: ios swift xcode core-data

我已经成功地在应用程序中实现了核心数据。一切正常,但我遇到了问题。我正在使用合并策略来更新记录。 我有两个实体,名称为问题成员,它们之间存在一对多的关系。一期有很多成员。

数据来自服务器,并保存在以下两个实体中:

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)")
    } 

}

1 个答案:

答案 0 :(得分:1)

我进行了一点调查,发现没有一个合并策略能够满足您的需求:在存在唯一性约束的情况下,NSRollbackMergePolicyNSOverwriteMergePolicy都仅保存旧的(存在于持久性存储中)对象集在关系中,NSMergeByPropertyStoreTrumpMergePolicyNSMergeByPropertyObjectTrumpMergePolicy将所有对象以两个版本(在磁盘和内存中)保存为具有关系的对象。看来您必须自己管理这种关系...