stackmob 1对多关系架构

时间:2013-05-30 19:15:54

标签: core-data architecture nspredicate nsfetchrequest stackmob

我正在寻找一个ios应用程序的1对多关系的架构指导,其后端运行在stackmob(baas)上。

在我的项目中,我想实现像帖子流一样的Facebook。用户可以在帖子上写评论。

1 post - > n评论

当我创建帖子的视图(iOS UITableview)时,我想只显示评论数量。实际注释将显示在子视图中。实现这个的最佳方法是什么?我应该如何查询这些相关对象?

如果我首先获取所有帖子,然后对于每个帖子,我必须查询评论的数量,我害怕遇到性能问题: - (

关于查询1对多关系而不产生多少http开销的建议是什么?

我发现这篇帖子,我至少知道StackMob不支持获取关系的属性(project.user == X的任务):

NSPredicate traversing relationship (StackMob)

感谢您的支持!

干杯,

1 个答案:

答案 0 :(得分:0)

我假设您已阅读this tutorial

CoreData使用称为“故障”的机制来减少应用程序的内存使用量。 来自Apple的docs

“错误是占位符对象,表示尚未完全实现的托管对象,或者是表示关系的集合对象”

这意味着当您从CoreData读取实体时,它不会仅仅为了填充那个实体而读取整个对象图。

在您的情况下,如果您阅读“发布”实体,则不会阅读与该帖子相关的所有评论。即使您将StackMob用作DataStore也是如此。

我做了一个非常小的项目只是为了测试这个,这就是我得到的。通过使用嗅探器Charles,我能够看到获取的请求/响应。One-to-many relationship

以下是我使用的查询:

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”,但它没有实际注释。

希望这有帮助!

相关问题