我正在使用 Parse.com 存储 iOS 应用程序的数据。下面的代码成功地检索了属于 PFObject“游戏”的嵌套数组中的所有值。但是,如果我需要查询另一个数组(与“获胜者”(例如“失败者”)处于同一级别),我无法让它工作,并且并非数组失败者中的所有值都被填充。我想我可以做到全部在主线程上,而不是尝试嵌套提取(嵌套块),但我想知道是否:
1) 我存储数据的方式是否会阻止我正确使用 Parse 的内置查询/获取功能?数据存储为:
PFObject * newGame = [PFObject objectWithClassName:@"Game"];
NSArray * winner = [NSArray arrayWithObjects:[_allPlayersPFDictionary objectForKey:[playerData objectAtIndex:0]], [playerData objectAtIndex:1], nil];
[_gamePF addObject:winner forKey:@"winners"];
2) 是否有更好、更简洁的方法来进行查询并获取查询中所有嵌套数据数组的所有值?同样,winners 不是 PFObject,而是 2 种不同类型的 PFObject 数组的数组([PFObject fetchAll:(NSArray *)winnersArray]
不起作用,因为 Array 中的所有对象都必须具有相同的 PFObject '类型')。我以这种方式存储它是因为每个获胜玩家都有另一个 PFObject(1 到多个)与之关联的“权力”。
这是有效的查询,但我不知道如何向其中添加“失败者”并在后台正确填充所有数据。
PFQuery * gamesQuery = [PFQuery queryWithClassName:@"Game"];
[gamesQuery orderByDescending:@"createdAt"];
gamesQuery.limit = 30;
[gamesQuery findObjectsInBackgroundWithBlock:^(NSArray * theGames, NSError * error) {
if (error) {
NSLog(@"ERROR: There was an error with the Query to get Games!");
} else {
for (PFObject * aGame in theGames) {
for (NSArray * aWinner in [aGame objectForKey:@"winners"]) {
[[aWinner objectAtIndex:0] fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) {
if (error) {
NSLog(@"ERROR: There was an error with the Query to get Player in winnersArray!");
} else {
[PFObject fetchAllIfNeededInBackground:[aWinner objectAtIndex:1] block:^(NSArray *objects, NSError *error) {
if (error) {
NSLog(@"ERROR: There was an error with the Query to get Powers in winnersArray!");
} else {
[_gamesPF addObject:aGame];
NSLog(@"Games from viewDidLoad %@", _gamesPF);
[_tableView reloadData];
}
}];
}
}];
}
}
}
}];