gpt4 book ai didi

ios - 如何将 PFQuery 用于存储为 NSDictionary 值的 PFObject 数组

转载 作者:行者123 更新时间:2023-12-01 17:26:41 25 4
gpt4 key购买 nike

我在 iOS 应用程序中使用 parse.com 将数据存储到解析云服务。我在查询嵌套对象时遇到问题。我有以下数据模型:

“游戏”类
包含“赢家”

"winners"是 NSDictionary 的数组,字典中的每一项都是 1 Player 到 N Powers 的映射

playerPowers 值为 PFObject 数组 (权力目前只有一个名字)为键:对象 ID 玩家(PFObject)

对于每个获胜者,我在“获胜者”(可以有多个获胜者)中添加 NSDictionary对象,像这样:

NSDictionary * winnerWithPowers = [NSDictionary dictionaryWithObject:tempPowers
forKey:[aWinnerPFObject objectId]];
[newGame addObject:winnerWithPowers forKey:@"winners"];

对于字典中的每个项目,键是玩家的现有 objectId,值是 PFObjects 的数组(权力)也在服务器上。当我查询“获胜者”时,我想检索 全部 填充的数据,所有获胜者及其各自的权力 PFObjects连同他们的所有数据。当我查询“获胜者”时,每个权力的详细信息 PFObject不完整(key:name 的值为 null)。以下是查询,然后是打印结果的代码,然后是包含两个获胜者的字典的输出:

//在 View 将出现:
PFQuery * gamesQuery = [PFQuery queryWithClassName:@"Game"];
[gamesQuery orderByDescending:@"createdAt"];
[gamesQuery findObjectsInBackgroundWithBlock:^(NSArray * theGames, NSError * error) {
if (error) {
NSLog(@"ERROR: There was an error with the Query for Games!");
} else {
_gamesPF = [[NSMutableArray alloc] initWithArray:theGames];
[_tableView reloadData];
}
}];

//在表格 View 中 cellForRowAtIndexPath: 方法(这是我自己的 TableViewController)
NSArray * testArray = [[_gamesPF objectAtIndex:row] objectForKey:@"winners"];
if ([testArray count] > 0) {
// print contents of first dictionary winners entry
NSLog(@"TestDictfromPF %@", [testArray objectAtIndex:0]);
}

日志:
2013-01-18 09:42:26.430 GamesTourney[20972:19d03] TestDictfromPF {

jchtlqsuIY = (
"<Power:OlJfby1iuz:(null)> {\n}", // problem is {\n}. Data exists on server but not in local structure after query
"<Power:eQkMUThGOh:(null)> {\n}" // ditto
);
}

最佳答案

当您检索到 PFObject (游戏)与其他 PFObjects(Powers 数组)相关,这些 Powers 的值不会被检索。您将必须在后续获取请求中获取这些 Power 的所有值。

从解析文档:

By default, when fetching an object, related PFObjects are not fetched. These objects' values cannot be retrieved until they have been fetched like so:


PFObject *post = [fetchedComment objectForKey:@"parent"];
[post fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) {
NSString *title = [post objectForKey:@"title"];
}];

关于 Fetch 与 Find 的说明:
在 PFObjects ( docs) 上调用 Fetches,而在 PFQueries ( docs) 中使用 Finds。

获取需要 PFObjects 作为输入,并且不返回任何内容。获取只是更新您已经从 Parse 检索到的 PFObjects 上的值。另一方面,Finds 将从 Parse 中检索 PFObjects。

由于您有一个 Powers 数组(它们是 PFObjects),请使用以下命令从 Parse 中检索所有值:
[PFObject fetchAllIfNeeded:(NSArray *)myPowers];

fetchAllIfNeededInBackground:如果您希望它是异步的。

关于ios - 如何将 PFQuery 用于存储为 NSDictionary 值的 PFObject 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14408820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com