【发布时间】:2015-11-22 00:04:24
【问题描述】:
我正在开发一个使用 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 同步到服务器。 “用户”与事件具有一对多的关系,目的是用户可以“保存”他们正在参加的事件。 (注:目前Core Data关系删除规则两边都设置为“无动作”)保存大致是这样完成的。
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 关系映射吗?或者也许我应该尝试通过其他方式完成以上所有工作?
【问题讨论】: