RestKit 重置核心数据存储
Posted
技术标签:
【中文标题】RestKit 重置核心数据存储【英文标题】:RestKit Reset Core Data Store 【发布时间】:2012-10-26 12:12:46 【问题描述】:从RestKit官方页面Restkit Github我找到以下重置商店:
- (void) resetSavedDatabase:(id)sender
RKManagedObjectStore *objectStore = [[RKObjectManager sharedManager] objectStore];
[objectStore resetPersistentStores];
[objectStore save:nil];
这行得通。但是,如果我在此方法之后执行以下操作,则会出现错误:
TestEntity *testEntity = [TestEntity createEntity];
testEntity.name = @"TestEntity";
NSError *error;
[[RKObjectManager sharedManager].objectStore save:&error];
错误:
由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'对象的持久存储是 无法从此 NSManagedObjectContext 的协调器访问'
一切都在后台调用。这个想法是,我想预加载一些 sqlite 数据,然后将它们与我的同步逻辑同步。 (当我不删除持久存储时,逻辑是有效的)
有人可以帮我吗?
【问题讨论】:
您删除了商店。以与第一次运行时相同的方式重新创建它。 @Paul de Lange,我添加了超链接。 @Mundi,正如我在 RestKit 代码中看到的,deletePersistentStore 会自动创建一个新商店 @AndydeletePersistentStore
已更改为 resetPersistentStores.. 请相应更新您的问题
【参考方案1】:
是的,它会自动重新创建存储,但在接下来的步骤中,它也会重新创建一个对象上下文。
所以您几乎肯定想在主线程上执行此操作。否则,RestKit 会将创建的持久存储与后台线程中的对象上下文相关联,并在线程结束时消失。
我完全不明白你为什么要这样做。
【讨论】:
我有一个同步机制,它在后台进行,并将一些 xml 数据与 restkit 同步到核心数据中。有时同步没有意义,而不是同步某些文件,我想将现有的填充 sqlite Core Data 文件下载到文档文件夹并用它替换旧的本地文件。 听起来很复杂,但无论哪种方式,您都需要将持久存储与所有托管对象上下文重新关联。否则,如您所见,一个线程上的访问将崩溃。 这很复杂,但它是这种情况下唯一可能的方法。我怎样才能做到这一点?当我在后台线程中使用 TestEntity *test = [TestEntity createEntity] 创建一些对象时。我如何保存这些对象,你能举个例子吗? 可能最简单的方法就是在主线程上创建每个对象,不是吗? 我会接受这个答案,因为问题是在后台线程中通过 RestKit API 创建对象。在主线程上执行每个调用都解决了这个问题。以上是关于RestKit 重置核心数据存储的主要内容,如果未能解决你的问题,请参考以下文章
由于 NSUnknownKeyException,无法从 RestKit 存储核心数据
如何使用 RestKit 将嵌套的 JSON 对象存储到核心数据中