试图修改写入事务之外的对象

时间:2014-09-03 07:06:14

标签: ios iphone realm

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

  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', reason: 'Attempting to modify object outside of a write transaction - call beginWriteTransaction on a RLMRealm instance first.'

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

提前致谢!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

没关系,我的愚蠢错误。谢谢@trojanfoe的提醒。

我正在后台线程上下载图像并在完成时将其存储在Realm中。看起来第二次调用defaultRealm会返回另一个实例。