我正在开发一个事件应用程序,该应用程序使用Restkit将“Events”与JSON API进行同步。映射看起来大致如此。Restkit更新过程中与本地用户对象的持续关系
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和/或Core Data实际上正在删除事件,然后将其插回到更新中。这在大多数情况下都是透明的,并且很好,但在这种情况下,我认为最初的删除是从用户中断事件的。
当然,上面的eventsMapping并没有以任何方式引用与用户的任何关系,所以这可能是关系被打破的另一个原因。我一直在阅读关于Restkit关系的更多信息,并且在成功关联对象之前,我已经在Restkit中使用关系/属性映射,但是在这种情况下,这两个对象都存在于API中。在这种情况下,这里的用户根本不是API的一部分,只有本地的解释。那么我还应该使用Restkit关系映射吗?或者,也许我应该试图通过另一种方式完成上述所有内容?