2

保存されているすべてのユーザー (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', reason: 'Attempting to modify object outside of a write transaction - call beginWriteTransaction on a RLMRealm instance first.'

理由はよくわかりません。デフォルト レルムの書き込みトランザクション内のオブジェクトを変更しています。

前もって感謝します!

4

2 に答える 2

2

別の RLMRealm インスタンスを取得するには、スレッドごとに 1 回 RLMRealm defaultRealm を呼び出す必要があります (ファイル パスは同じですが、変数は異なります)。これにより、すべてのスレッドセーフを簡単に整理できます。詳細については、 http://realm.io/docs/cocoa/0.84.0/#using-a-realm-across-threadsを参照してください。

于 2014-09-03T15:59:25.713 に答える
0

気にしないで、私のばかげた間違い。頭を上げてくれてありがとう@trojanfoe。

バックグラウンド スレッドで画像をダウンロードし、完了時に Realm に保存していました。2回目に呼び出すとdefaultRealm、別のインスタンスが返されるようです。

于 2014-09-03T07:29:03.170 に答える