【发布时间】:2015-07-03 14:29:38
【问题描述】:
编辑 3: 好的,忘记之前的编辑,我终于弄清楚了!但我还有一个小问题。该查询查找并显示共享相同最爱食物的用户的用户名,然后显示他们的整个最爱食物数组。我的问题是,如何只显示与当前用户最喜欢的食物相同的最喜欢的食物?代码:
PFQuery *query = [PFQuery queryWithClassName:@"_User"];
[query whereKey:@"username" notEqualTo:[PFUser currentUser][@"username"]];
[query whereKey:@"favouriteFood" containedIn:[PFUser currentUser][@"favouriteFood"]];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFObject *object in objects) {
NSString *username = object[@"username"];
NSArray *results = object[@"favouriteFood"];
NSLog(@"Username: %@ Shared Favourite Food: %@", username, results);
}
}
else {
NSLog(@"O dang");
}
}];
这会显示与当前用户至少有 1 种共同喜爱的食物的用户,但随后会显示他们所有喜爱的食物,而不是常见的食物。
谢谢。
第一次发帖:
我正在尝试创建一个查询来获取当前用户的 query1(一个数组)的结果,然后使用 query2 在数据库中搜索在其数组中包含一个或多个相同数据的其他帐户。这是一个示例,可帮助您了解我要做什么:
用户可以将数据输入到数组中,我们称数组为favouriteFoodArray。输入到数组中的所有数据都保存到 Parse 的一行中,名为 favouriteFood。 现在,当前用户想要搜索分享相同喜欢的食物(至少一个数组条目相同)的其他用户。
所以我有 query1 来查找当前用户最喜欢的食物数组:
PFUser *currentUser = [PFUser currentUser];
PFQuery *favouriteFood = [PFQuery queryWithClassName:@"_User"];
[favouriteFood whereKey:@"username" equalTo:currentUser.username];
[favouriteFood findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFUser *object in objects) {
self.usernameString = object.username;
[self.results arrayByAddingObjectsFromArray:object[@"favouriteFood"]];
NSLog(@"Username: %@, Favourite Food: %@", self.usernameString, self.results);
}
}
else {
NSLog(@"Error..");
}
}];
query2 然后去寻找所有用户最喜欢的食物,所以我们可以将 query1 结果与 query2 结果进行比较并显示至少有一个公共数组条目的人的用户名:
PFQuery *allFavouriteFood = [PFQuery queryWithClassName:@"_User"];
[allFavouriteFood findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFUser *object in objects) {
self.allUsernameString = object.username;
[self.allFavouriteFoodArray arrayByAddingObjectsFromArray:object[@"favouriteFood"]];
NSLog(@"Username: %@ Favourite Food: %@", self.allUsernameString, self.allFavouriteFoodArray);
}
}
}];
现在,这两个查询工作,我遇到的问题是创建第三个查询来比较 query1 结果和 query2 结果。我试过使用:
...
[finalSearch whereKey:@"favouriteFood" containedIn:self.allFavouriteFoodArray];
...
但我遇到了一些奇怪的错误。我一直在努力解决这个问题。任何帮助是极大的赞赏。我希望我没有把这一切都复杂化。 谢谢。
编辑:
这是 query3 的示例:
PFQuery *results = [PFUser query];
[results whereKey:@"favouriteFood" containedIn:self.allFavouriteFoods];
[results findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFUser *object in objects) {
self.allUsernameString = object.username;
[self.favouriteFoodResults arrayByAddingObjectsFromArray:object[@"favouriteFood"]];
NSLog(@"Username: %@ Shared Favourite Food: %@", self.otherUsernameString, self.allFavouriteFoodArray);
}
}
else {
NSLog(@"Error");
}
}];
当我有 whereKey:containIn: self.allFavouriteFoods 时,我会遇到各种错误。
'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: $in)'.
【问题讨论】:
-
您不需要查询第一部分,您已经有了用户和食物数组。你也不应该使用
queryWithClassName:@"_User",使用[PFUser query]。你为什么不在allFavouriteFood上使用whereKey:containedIn:? -
@Wain 我已经解决了,谢谢。检查我的编辑。谢谢
标签: objective-c arrays parse-platform