Ios 在Restkit更新期间保持与本地用户对象的关系

Ios 在Restkit更新期间保持与本地用户对象的关系,ios,core-data,restkit,Ios,Core Data,Restkit,我正在开发一个事件应用程序,它使用Restkit将事件与JSON API同步。映射大致如下所示 var eventsMapping = RKEntityMapping(forEntityForName: "Event", inManagedObjectStore: managedObjectStore) eventsMapping.identificationAttributes = ["eventID", "name", "eventDescription"]

我正在开发一个事件应用程序,它使用Restkit将事件与JSON API同步。映射大致如下所示

var eventsMapping = RKEntityMapping(forEntityForName: "Event", inManagedObjectStore: managedObjectStore)
        eventsMapping.identificationAttributes = ["eventID", "name", "eventDescription"]
        eventsMapping.addAttributeMappingsFromDictionary([
            "id":"eventID",
            "title":"name",
            "description":"eventDescription",
            (more mapping attributes here, etc...)
            ])
使用NSFetchedResultsController显示事件。在本地,创建了一个“用户”NSManagedObject…但是该对象只是应用程序的本地对象,没有通过Restkit同步到服务器。用户与事件有一对多的关系,目的是用户可以保存他们正在参加的事件。注意:现在,核心数据关系删除规则的双方都设置为无操作。保存大致是这样完成的

var managedObjectContext = RKManagedObjectStore.defaultStore().mainQueueManagedObjectContext
currentUser.mutableSetValueForKey("events").addObject(event)
managedObjectContext?.saveToPersistentStore(&error)
到目前为止,一切都很好,选定的事件与用户一起成功存储和保存,并按预期通过应用程序重新启动保持。但是,有一种情况会导致从用户中删除事件,即在服务器上对该特定事件进行更新。当Restkit检测到这一点并更新事件时,根据我在NSFetchedResultsController didChangeObject中放置的断点,显然Restkit和/或核心数据实际上是在删除事件,然后将其与更新一起插入。这是透明的,在大多数情况下都很好,但在这种情况下,我认为初始删除是将事件从用户中断的原因


当然,上面的事件映射不会以任何方式引用与用户的任何关系,因此这可能是关系中断的另一个原因。我已经阅读了更多关于Restkit关系的内容,之前我在Restkit中成功地使用了关系/属性映射来关联对象,但在这种情况下,两个对象都存在于API上。在本例中,这里的用户根本不是API的一部分,正如我所解释的,只是本地用户。那么,我还应该使用Restkit关系映射吗?或者我应该尝试通过另一种方式来完成以上所有工作?

我找到了答案,我在上面的代码中犯了一个错误。在映射的标识属性上,我有三个不同的属性,而我只应该使用一个主键,该主键永远不会更改eventID

eventsMapping.identificationAttributes = ["eventID"]
显然发生的事情是因为我将title/name指定为标识属性,每当服务器上的title发生更改时,Restkit就会将其标识为新的/不同的对象,并删除旧对象并插入新对象。当我更改它只是为了指定主键时,它触发了一个更新,并且我与用户的关系保持不变

还有一个让我一开始就感到困惑的注意事项:我遇到的一些帮助我解决这个问题的旧信息说在映射上使用primaryKeyAttribute。这显然是过时的信息:改用IdentificationAttribute