2016-07-25 5 views
3

私はこのようなバックグラウンドスレッドでレルムデータベースをリフレッシュしたい: (私はWebサービスからの新鮮なデータを持っているので)Realmオブジェクトのコピーを作成することはできますか?

RLMRealm *realm = [RLMRealm defaultRealm]; 
[realm beginWriteTransaction]; 
[realm deleteAllObjects]; // !! 
[Pubs createOrUpdateInRealm:[RLMRealm defaultRealm] withJSONArray:data]; 
[realm commitWriteTransaction]; 

問題はその間、私は&は、レルムDB内のオブジェクトを更新削除すること、である、ユーザーその間に削除されたRealmオブジェクト(Pubs)を指し示すDetail ViewControllerをいくつかオープンして、例外がスローされるようにすることができます。

私はいつもこのような何かをする必要があります詳細コントローラまたはそのプロパティからレルムオブジェクトにアクセスしたいとき、私はいつも除いて、このための任意のソリューションが表示されない:

(それは常に得ることを意味レルムのオブジェクトが、それはおそらく、あまりにも失敗する可能性があります)

pub = [Pubs objectsWhere:[NSString stringWithFormat: @"pubId = %lu", (long)_selectedPubId]].firstObject; 

しかし、私はこのソリューションを使用していません。

pub = [Pubs objectsWhere:[NSString stringWithFormat: @"pubId = %lu", (long)_selectedPubId]].firstObject; 
pub = [pub safeCopy]; 

のでPubRealmObjectはその間削除することができますが、パブオブジェクトはソロのをアクセスもする唯一の目的のために(メモリ内に存在します:私はこのような何か私が詳細ビューコントローラに呼び出すことができれば最高のだろう思っていますデータプロパティ)。

誰かが同様のことを試しましたか?

iOS SDKの方法でもlike thisを使用している場合もありますか?

データベースのオブジェクトを削除または更新するなどのrealmオブジェクトメソッドでは動作しません。

BtwメインスレッドでRealm dbの更新を呼び出そうとしましたが、アプリケーションに遅れが出るように5〜7秒(1000個のjsonオブジェクト)が必要です。だからこそ私はバックグラウンドアップデート&オブジェクトの安全なコピーが良いかもしれないと思っている。

しかし、私はオブジェクトをコピーしている間も失敗する可能性があると考えています。だからこの解決策は何ですか? (バックグラウンドの更新とRealmオブジェクトの安全なアクセスの比較)

答えて

12

通常、ビューコントローラをその下から削除できるデータモデルに依存させるのは良い設計パターンではありません。 object.invalidatedプロパティをチェックすることによって、Realmオブジェクトが例外を回避するために削除されているかどうかを確認することができます。レルムオブジェクトのデタッチコピーを作成するために、どのような場合には

、すべてを行う必要がある:

RLMObject *copiedObject = [[RLMObject alloc] initWithValue:object]; 

これは、オブジェクトのコピーを作成しますが、それはどのレルムに挿入されることはありませんインスタンス。オブジェクトが他のどのレルムオブジェクトにリンクしていても、それらはコピーされません。新しいオブジェクトは既存のコピーを指し示すだけです。

しかし、私はまだ、あなたがこれを行う必要性を避けるために、あなたのWebサービスからRealmを少しスマートに更新する実装を行うことができると言いたいと思います。

オブジェクトにa primary keyが実装されている場合、createOrUpdateInRealmを呼び出すと、既存のオブジェクトが新しい値で更新されます。

幸運を祈る!

+0

こんにちはTiM thxさんの返信です。私はそれをチェックします。あなたが正しいと思うcreateOrUpdateInRealmメソッドについては、私は同じアイディアを持っていましたが、削除された行は管理されません。彼らは残るだろう。だから、削除されたものを見つけて削除しなければならず、ユーザーは削除されたアイテムを開くことができ、状況は同じです。しかし、いくつかのデータを削除することは非常にまれである可能性があります。だから私はそのように選ぶことができるかもしれない。私は見るでしょう。 – luky

関連する問題