iOS RestKit 无法将本地实体保存到数据库

2024-04-04

我正在使用 RestKit 0.20 解析 JSON 数据并保存到数据库。 这里有一个映射实体 SchoolClass,它由 RestKit 处理并保存得很好。 我有另一个名为 MyClass 的实体,它存储我选择的类。这仅在设备上是本地的。

这是我创建并保存 MyClass 实体的代码

 NSManagedObjectContext *managedObjCtx = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext;
 MyClass* course = [managedObjCtx insertNewObjectForEntityForName:@"MyClass"];

 .. set the data for course here

 NSError *executeError = nil;
 if(![managedObjCtx save:&executeError]) {
      NSLog(@"Failed to save to data store");
 }

这是初始化托管数据存储的代码

  // Initialize managed object store
    NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
    RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
    objectManager.managedObjectStore = managedObjectStore;

   /**
     Complete Core Data stack initialization
     */
    [managedObjectStore createPersistentStoreCoordinator];
    NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"RKMainDb.sqlite"];
    NSString *seedPath = [[NSBundle mainBundle] pathForResource:@"RKSeedDatabase" ofType:@"sqlite"];
    NSError *error;
    NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:seedPath withConfiguration:nil options:nil error:&error];
    NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error);

    // Create the managed object contexts
    [managedObjectStore createManagedObjectContexts];

    // Configure a managed object cache to ensure we do not create duplicate objects
    managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];

看来保存成功,并且在 MyClasseTableViewController 中我可以读取保存的 MyClass 条目。但是,在我关闭应用程序并再次重新启动后。 MyClassTableViewController 是空的,因为获取的结果是空的。我使用 SQLiteBrowser 打开 sqlite 文件,并且 MyClass 表为空。看起来 MyClass 实体仅保存在缓存中,而不保存在持久存储中。是否需要调用RestKit提供的一些API来保存?我试图通读该文档但找不到它。请帮忙。


感谢Tom的带领,我发现RestKit有NSManagedObjectContext(RKAdditions),它有一个方法:

- (BOOL)saveToPersistentStore:(NSError **)error

是的,它确实有处理嵌套托管对象上下文的逻辑。 这是有效的新代码,仅更改一行,但花了很多时间才能找到正确的调用:(

#import "NSManagedObjectContext+RKAdditions.h"
     NSManagedObjectContext *managedObjCtx = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext;
     MyClass* course = [managedObjCtx insertNewObjectForEntityForName:@"MyClass"];

     .. set the data for course here

     NSError *executeError = nil;
     if(![managedObjCtx saveToPersistentStore:&executeError]) {
          NSLog(@"Failed to save to data store");
     }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS RestKit 无法将本地实体保存到数据库 的相关文章

随机推荐

  • ASP.NET MVC - 会话为空

    我在 net4 上有一个 MVC3 应用程序 其会话在开发环境中工作 但不在生产环境中工作 在生产中 我记录了会话 ID 然后在我从会话中设置和获取时它是相同的 当我尝试参加会议时 我得到了Null Exception 这是我访问会话的方式
  • 没有持久化:Fluent nHibernate 异常

    我收到异常 没有持久化 MVCTemplate Common Entities User 我谷歌这个问题并应用我找到的所有解决方案 但一切对我来说都没用 有谁知道我做错了什么 我的用户类代码是 public class User publi
  • 如何让Hibernate不删除表

    我正在使用休眠 每当我尝试添加记录时 它都会删除表并再次添加它 它从不使用现有的表并对其进行更改 这是我的相关部分hibernate cfg xml
  • Kivy/Python Countdown App 项目 kivy has no attribute 'built' 错误

    问题 什么是 没有属性 构建 错误 我需要做什么来更正此代码 以便它可以接受日期时间对象并显示倒计时 抱歉发了这么长的帖子 我已经提供了代码和链接 kv 文件 https github com tmusa CySat GroundStati
  • Excel:下拉列表取决于另一个下拉列表

    我想要在 Excel 中执行以下操作 相邻单元格中的两个下拉列表 下拉列表 1 下拉列表 1 Dropdown list 1 One Two Three 如果我在第一个单元格中选择一个 第二个单元格中的列表应包含以下选项 One 1 1 1
  • 当我运行我的 android UIAutomator 代码时,它显示错误

    当我运行我的 android UIAutomator 代码时 它显示以下错误 INSTRUMENTATION RESULT shortMsg java lang RuntimeExceptionINSTRUMENTATION RESULT
  • Objective-C instantiateViewControllerWithIdentifier 返回 nil

    一周后我打开了我的项目 看来对于所有新的UIViewController我创建于StoryBoard instantiateViewControllerWithIdentifier返回为零 一切ViewControllers项目中已经存在的
  • Flask 和 SQLAlchemy 以及 MetaData 对象

    这是我第一次使用这个环境 我愿意使用的 SQLAlchemy 部分只是允许我使用 autoload True 的表对象查询数据库的部分 我这样做是因为我的表已经存在于数据库 mysql 服务器 中 并且不是通过定义 Flask 模型创建的
  • 在单例上使用 Dispose 来清理资源

    我的问题可能更多地与语义有关 而不是与实际使用有关IDisposable 我正在致力于实现一个单例类 该类负责管理在应用程序执行期间创建的数据库实例 当应用程序关闭时 应删除该数据库 现在我正在处理这个删除Cleanup 应用程序在关闭时调
  • 如何在 Bash 脚本中从一系列 _# 文件名中选择最大数字

    我有一个包含文件的目录 heat1 conf heat2 conf heat
  • Silverlight 4 和浏览器外

    有谁知道是否可以对 app current mainwindow width 进行动画处理 以便在以编程方式调整 oob 应用程序窗口大小时获得一个带有缓动的漂亮动画 谢谢 最简单的方法是向页面添加滑块控件 滑块可以折叠 仅用于具有简单的动
  • VBA 自函数返回#VALUE!单元格出错,而在函数窗口中正确返回实际值

    我在下面写的函数是采用一个范围 我对其进行了一些条件格式设置 用于字体颜色 以及另一个用于比较颜色的单元格范围 功能是统计大范围内有多少个单元格与一个单元格范围具有相同的字体颜色 Function CountColor rng As Ran
  • 在logstash中使用docker GELF驱动程序env/labels

    Docker GELF 日志驱动程序允许env and labels日志选项 gelf 日志记录驱动程序支持 lab els 和 env 选项 它添加了额外的密钥extra字段 以下划线 为前缀 ref https docs docker
  • 分配给 Rails ActiveRecord 中的布尔字段时,值如何转换?

    我的问题的简短版本 在 Rails ActiveRecord 中 如果我有一个布尔字段并且我给它分配类似 abc or 2 然后它立即转换为false 价值1被投射到true and nil仍然是nil 为什么会这样呢 在哪里可以找到解释此
  • PHPUnit:存根多个接口

    我正在掌握 PHPUnit 到目前为止发现它非常容易使用 但我遇到了一个给我带来困难的测试用例 我正在针对一组预期对象实现的接口 一些是 PHP 的 一些是自制的 编写代码 并且 SUT 需要一个输入对象来实现多个接口 例如 class M
  • 计算两个模型的梯度

    假设我们正在构建一个基本的 CNN 来识别猫和狗的图片 二元分类器 此类 CNN 的示例如下 model Sequential Conv2D 32 3 3 input shape Activation relu MaxPooling2D p
  • 在JetPack Compose中手动重构所有AndroidView

    在我的项目中 我使用 JetPack Compose 和 AndroidView 来使用 XML 视图 Composable fun MyComposable message String AndroidView factory conte
  • MSBuild /m:4 失败,因为它构建了同一个项目两次

    我的团队有一个大型解决方案 约 500 个 csproj 我们使用 VS2012 并使用 TFS Build 进行构建 TFS Build 使用 MSBuild 4 目前我们串行构建 但我们希望并行构建 使用msbuild maxcpuco
  • Maven 不会使用公钥来部署

    我正在使用 SSH 将我的 Java 工件部署到服务器 我设置了密钥 以便可以交互式 SSH 到服务器而无需密码 但是当我尝试运行 mvn deploy or mvn release perform 命令 它挂起 我认为是密码提示 My m
  • iOS RestKit 无法将本地实体保存到数据库

    我正在使用 RestKit 0 20 解析 JSON 数据并保存到数据库 这里有一个映射实体 SchoolClass 它由 RestKit 处理并保存得很好 我有另一个名为 MyClass 的实体 它存储我选择的类 这仅在设备上是本地的 这