0

stackmob (baas) で実行されるバックエンドを備えた iOS アプリの 1 対多の関係に関するアーキテクチャ ガイダンスを探しています。

私のプロジェクトでは、Facebook のような投稿ストリームを実装したいと考えています。ユーザーは投稿にコメントを書き込むことができます。

1 投稿 -> n コメント

投稿のビュー (iOS UITableview) を作成するときに、コメントの数だけを表示したい。実際のコメントはサブビューに表示されます。これを実装する最良の方法は何ですか? このような関連オブジェクトを照会するにはどうすればよいですか?

最初にすべての投稿を取得してから、投稿ごとにコメントの数を照会する必要がある場合、パフォーマンスの問題が発生するのではないかと心配しています:-(

多くのhttpオーバーヘッドを発生させずに1対多の関係を照会することについてのあなたの提案は何ですか...

この投稿を見つけて、関係の属性の取得 (project.user == X のタスク) が StackMob でサポートされていないことを少なくとも知りました。

NSPredicate 横断関係 (StackMob)

ご協力ありがとうございました!

乾杯、

1月

4

1 に答える 1

0

このチュートリアルを読んだことがあると思います。

CoreData は、「フォールティング」と呼ばれるメカニズムを使用して、アプリケーションのメモリ使用量を削減します。Appleのドキュメントから:

「フォルトは、まだ完全には実現されていない管理オブジェクトを表すプレースホルダー オブジェクト、または関係を表すコレクション オブジェクトです」

これが意味することは、CoreData からエンティティを読み取るときに、その 1 つのエンティティを設定するためだけにオブジェクト グラフ全体を読み取るわけではないということです。

あなたの場合、「投稿」エンティティを読んでも、その投稿に関連するすべてのコメントが読み取られるわけではありません。これは、StackMob を DataStore として使用している場合にも当てはまります。

これをテストするためだけに非常に小さなプロジェクトを作成しましたが、これが得られたものです。スニファー Charles を使用することで、フェッチの要求/応答を確認できました。一対多の関係

使用したクエリは次のとおりです。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

[self.managedObjectContext executeFetchRequest:fetchRequest onSuccess:^(NSArray *results) {

    for (NSManagedObject *managedObject in results) {
        NSArray *comments = [managedObject valueForKey:@"comments"];
        NSLog(@"Post comments: %d", comments.count);
    }

} onFailure:^(NSError *error) {
    NSLog(@"Error fetching: %@", error);
}];

そして、これが私が得た応答です(Charlesを使用して)

[
  {
    "post_id": "85FC22A1-92ED-484B-9B52-78CBFE464E5D",
    "text": "Post1",
    "lastmoddate": 1370916620273,
    "createddate": 1370915371016,
    "comments": [
      "5F421C86-F7E7-4BAD-AB21-F056EB7D9451",
      "C1CD96E2-856A-43F0-A71D-09CF14732630",
      "BAD9F652-C181-4AA1-8717-05DD5B2CA54E",
      "AC7D869B-A2BD-4181-8DCF-21C8E127540F",
      "2D1A1C80-9A80-48AE-819D-675851EA17D6"
    ]
  },
  {
    "post_id": "8A84BE1B-6ECE-4C49-B706-7981490C5C2E",
    "text": "Post2",
    "lastmoddate": 1370916678114,
    "createddate": 1370915379347,
    "comments": [
      "3C001706-2D91-4183-9A07-33D77D5AB307",
      "E7DC3A89-2C3D-4510-83E5-BE13A9E626CF",
      "2874B59C-781B-4605-97C7-E4EF7965AF4E"
    ]
  },
  {
    "post_id": "13E60590-E4E7-4012-A3E2-2F0339498D94",
    "text": "Post3",
    "lastmoddate": 1370916750434,
    "createddate": 1370915398649,
    "comments": [
      "AEA3E5E3-E32E-4DAA-A649-6D8DE02FB9B2",
      "DFCBD7E2-9360-4221-99DB-1DE2EE5590CE",
      "484E6832-3873-4655-A6C1-0303A42127D9",
      "B2316F8B-0AAF-451F-A91C-9E8B4657B1A5"
    ]
  }
]

応答からわかるように、すべての「コメント」配列には StackMob に格納されたコメントの「ID」がありますが、実際のコメントはありません。

お役に立てれば!

于 2013-06-11T03:03:22.027 に答える