ios - 核心数据合并政策

标签 ios swift xcode core-data

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

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

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

}

最佳答案

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

关于ios - 核心数据合并政策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51464249/

相关文章:

ios - 回到前台引用对plist文件的写入操作时,Adobe iOS SDK崩溃

ios - UISearchController 问题

core-data - 向实体添加属性后,快速核心数据崩溃

ios - 如何确保 xib 文件在所有设备上正确显示?

ios - Interface Builder 文件中的未知类 <myClass>

ios - swift 不能在 firebase 数据库中创建一个 child

xcode - 如何在我的 Mac Cocoa 应用程序中创建 iOS 风格的工具栏?

json - 从 Swift 中的 HTTPCookie 读取 JSON 错误不起作用

ios - Swift 4 UIDatePicker 位置到底部

ios - 如何在Xcode 6.3.1中为iPhone 4/5添加模拟器