Realmオブジェクトはスレッドセーフではなく、スレッド間でやりとりすることはできませんが、マルチスレッド環境でRealmを使用するにはかなり難しい作業です。 :)
バックグラウンドスレッドのRealm
インスタンスにいくつかの変更をコミットすると、実行スレッドの次回の繰り返しで、メインスレッドのRealm
インスタンスが自動的に更新されます。メインスレッドにResults
のリストがある場合(つまり、UITableView
にRealmオブジェクトを表示する場合)、これらのオブジェクトも新しいオブジェクト/変更で自動的に更新されるため、UIが更新されるようにするだけですこれらの変化を説明するために :明示的なレルムモデルObject
で作業している場合は
(NBは。Realm
他のスレッド内のインスタンスではなく、メインスレッドの場合は、明示的にそれらの変更にプルしRealm.refresh()
を呼び出す必要があります)、それを渡したいです別のスレッドに作業を継続するのが最も簡単な方法は、現在のスレッドのRealm
インスタンスに保存し、新しいスレッドのインスタンスRealm
から再フェッチすることです。この場合、スレッド間でこの値を渡すことができるため、新しいスレッドでRealm.objectForPrimaryKey()
を呼び出すだけで、同じオブジェクトを再フェッチするだけで、というスキーマにObject
スキーマを含めることをお勧めします。
詳細については、レルムのドキュメントページのThreading sectionを参照してください。現時点では、Realmオブジェクトがバックグラウンドで変更されたときに、UIアップデートを自動的にトリガするために、通知を簡単にする方法にも取り組んでいます。
(免責事項:私はレルムのために働く)
出典
2016-04-12 07:29:58
TiM
は、だけではなく、上の主キーを渡すあなたが今 'ThreadSafeReference'を使用することができます(などのiOS、MacOSの、)レルム2.2のように、この答えを更新するには:HTTPS ://realm.io/news/obj-c-swift-2-2-thread-safe-reference-sort-properties-relationships/安全に処理された場合、RealmオブジェクトをSwiftオブジェクトにマッピングする際の価値はありますか、それともそれは時間の無駄です、そして、決して考慮されるべきではありませんか? –