ios - 尝试在写事务之外修改对象

标签 ios iphone realm

我正在尝试检索所有已保存的用户(RLMObject)对象。然后我检查是否保存了任何对象。如果不是,我创建一个新的用户对象并尝试保存它。

  RLMArray *allUsers = [User allObjects];

 if (allUsers.count == 0) {
      RLMRealm *realm = [RLMRealm defaultRealm];
      [realm beginWriteTransaction];

      User *newUser = [[User alloc]init];
      newUser.userID = [userDict[@"id"] integerValue];
      newUser.role = userDict[@"role"];
      newUser.email = userDict[@"email"];
      newUser.given_name = userDict[@"profile"][@"given_name"];
      newUser.family_name = userDict[@"profile"][@"family_name"];

      [realm addObject:newUser];
      [realm commitWriteTransaction];

  }

但是,这会崩溃并显示消息:'RLMException',原因:'尝试在写入事务之外修改对象 - 首先在 RLMRealm 实例上调用 beginWriteTransaction。'

我真的不知道为什么。我正在默认 Realm 上的写入事务内修改对象。

提前致谢!

最佳答案

每个线程必须调用一次 RLMRealm defaultRealm,以获得不同的 RLMRealm 实例(相同的文件路径,但不同的变量)。这使我们能够轻松地为您解决所有线程安全问题。请参阅http://realm.io/docs/cocoa/0.84.0/#using-a-realm-across-threads了解详情。

关于ios - 尝试在写事务之外修改对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25638252/

相关文章:

iphone - NSBundle pathsForResourcesOfType : working unreliably

ios - 具有相同 NSUserdefaults 的免费和付费游戏

ios - PaintCode - 更新 View 并传递变量

iphone - 如何知道CLLocationManager用户触摸了哪个警报按钮?

iphone - 从 nsdate 获取一周中的任何一天?

android - recyclerView 中的数据绑定(bind)

iOS,将文件从收件箱文件夹复制到文档路径

objective-c - const 全局字符串文字已损坏

ios - Realm 反向关系支持使用字典值创建

android - 为什么 Realm 会为所有的模型类生成代理类?