Одна проблема, которую я вижу с вашим запросом, состоит в том, что есть вероятность, что он не будет получать все сообщения в базе данных.Если сообщение имеет 0 комментариев, ни один из объектов Comment не будет иметь ссылку на него, и, таким образом, вы не получите его.
Следовательно, вы должны выполнить запрос к сообщению "Post" и в его завершении выполнить запросна "Комментарий".Таким образом, вы не пропустите ни одного сообщения с 0 комментариями.Когда вы сделаете это, вам не нужно будет включать ключ «post» в запросе «Комментарий».Это имеет несколько преимуществ.
Во-первых, каждое включение также является другим запросом для этого объекта.Таким образом, каждый новый объект Comment будет создавать другой запрос в бэкэнде.Вы избавитесь от этого автоматически.
Во-вторых, для «Поста» с несколькими комментариями вы будете запрашивать одно и то же сообщение несколько раз, и одно и то же сообщение будет возвращаться несколько раз, что потребляет ненужную пропускную способность.
После раздельного получения Сообщений и Комментариев просто объедините их.
Кроме того, я бы сделал такое объединение, которое я считаю более читабельным, но это всего лишь личное предпочтение.
- (void)fetchPosts {
NSString *commentsKey = @"comments";
NSString *postKey = @"post";
PFQuery *query = [PFQuery queryWithClassName:@"Comment"];
[query includeKey:postKey];
[query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) {
if (error == nil) {
NSMutableArray *array = [[NSMutableArray alloc]init];
NSMutableDictionary *d = [NSMutableDictionary dictionary];
for (PFObject *comment in objects) {
PFObject *post = [comment objectForKey:postKey];
if (d[post.objectId]) {
[d[post.objectId][commentsKey] addObject:comment];
}
else{
d[post.objectId] = [NSMutableDictionary dictionary];
d[post.objectId][postKey]=post;
d[post.objectId][commentsKey] = [NSMutableArray arrayWithObject:comment];
}
}
for (NSString *key in [d allKeys]) {
[array addObject:d[key]];
}
self.posts = array; // assuming: @property (nonatomic, strong) NSArray *posts;
}
else {
NSLog(@"Error fetching posts: %@", error.localizedDescription);
}
}];
}