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 会自动创建一个新商店 @Andy deletePersistentStore 已更改为 resetPersistentStores.. 请相应更新您的问题 【参考方案1】:

是的,它会自动重新创建存储,但在接下来的步骤中,它也会重新创建一个对象上下文。

所以您几乎肯定想在主线程上执行此操作。否则,RestKit 会将创建的持久存储与后台线程中的对象上下文相关联,并在线程结束时消失。

我完全不明白你为什么要这样做。

【讨论】:

我有一个同步机制,它在后台进行,并将一些 xml 数据与 restkit 同步到核心数据中。有时同步没有意义,而不是同步某些文件,我想将现有的填充 sqlite Core Data 文件下载到文档文件夹并用它替换旧的本地文件。 听起来很复杂,但无论哪种方式,您都需要将持久存储与所有托管对象上下文重新关联。否则,如您所见,一个线程上的访问将崩溃。 这很复杂,但它是这种情况下唯一可能的方法。我怎样才能做到这一点?当我在后台线程中使用 TestEntity *test = [TestEntity createEntity] 创建一些对象时。我如何保存这些对象,你能举个例子吗? 可能最简单的方法就是在主线程上创建每个对象,不是吗? 我会接受这个答案,因为问题是在后台线程中通过 RestKit API 创建对象。在主线程上执行每个调用都解决了这个问题。

以上是关于RestKit 重置核心数据存储的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 内存核心数据存储的配置

由于 NSUnknownKeyException,无法从 RestKit 存储核心数据

如何使用 RestKit 将嵌套的 JSON 对象存储到核心数据中

使用核心数据在 RestKit 中进行远程服务器搜索

重置存储时核心数据崩溃:“无法从此 NSManagedObjectContext 的协调器访问对象的持久存储”

使用 RestKit 0.20 备份核心数据