2016-05-12 20 views
0

私はRealmのドキュメントを学び、オブジェクトのグループを管理するために使用できるさまざまなクラスを理解しました。私が理解していることから、RLMArrays、RLMLinkingObjects、およびRLMResultsがあります。私はBlogクラスの例を使って、クラスコメントの多くのオブジェクトを使って質問を設定します。 Blogクラスには10000sのオブジェクトがあり、各Blogオブジェクトには10​​00sのコメントが含まれていると仮定すると、Realm内で関係を最もうまく表現する方法はわかりません。私はブログのプロパティとしてコメントのRLMArrayを使用することができます。それから私はブログとコメントの逆リンケージを管理しなければなりません。私はRLMLinkingObjectsにつながります。なぜなら、私はブログにコメントプロパティを表現することができます。コメントはブログにリンクされているからです。それから、私が一度にインスタンス化したいと思うより多くのブログやコメントがあるという合併症があります。これは、RLMResultsオプションが魅力的なのは、オブジェクトを遅延してインスタンス化できるためです。しかし、これはオブジェクトとのインターフェースの性質を変えます。これは、プロパティ(ブログなど)にアクセスするのではなく、ブログに関連付けられたコメントを照会するようになるためです。Realmで1対多数の関係を実装する適切な方法

ここでは、このデータがすべてサーバー上に存在することを考えていますが、オブジェクトモデルをローカルで(永続性で)定義してから、モデルをマップする方法を理解したいと考えていますサーバーにRESTします。

レルムのユーザーからの意見、考え、提案が大好きです。

ありがとうございます!

答えて

0

あなたは正しい道を歩いています。 Blogオブジェクトに複数のCommentオブジェクトが割り当てられている可能性がありますので、BlogRLMArrayプロパティを使用してすべてのコメントを管理することが適切です。 RLMLinkingObjectsを使用して、特定のCommentが属するBlogオブジェクトを確認することができます。

@interface Comment : RLMObject 
@property (readonly) RLMLinkingObjects *blog; 
@property NSString *message; 
@end 

@implementation Comment 
+ (NSDictionary *)linkingObjectsProperties { 
    return @{ 
     @"blog": [RLMPropertyDescriptor descriptorWithClass:Blog.class propertyName:@"comments"], 
    }; 
} 
@end 
RLM_ARRAY_TYPE(Comment) 

@interface Blog : RLMObject 
@property RLMArray<Comment *><Comment> *comments; 
@end 

@implementation Blog 
@end 

RLMArrayはちょうどRLMResultsのように振る舞います。それはデータを遅延ロードし、基本となるコンテンツへのライブ参照です。この場合、RLMArrayに簡単に頼ることができます。 :)

公式の解決策はありませんが、JSONデータをREST APIからRealm(たとえばhttps://github.com/matthewcheok/Realm-JSON)にマップするのに役立つサードパーティのライブラリが多数ありますので、チェックアウトする価値があります。どちらの方法でも、スキーマがローカルとリモートで比較的似ている限り、あまり問題なくマップすることができます。

私はそれが助けて欲しい!

+0

これは非常に参考になります... RLMArrayが遅延ロードされていることを知っておきましょう。それは一貫性のあるモデルになります。現在、配列アクセスまたはオブジェクトプロパティで「フォールト」を検出する方法はありますか?理想的には、オブジェクトがローカルで利用できないときにネットワークから取得したいのですが。 – edward

関連する問題