0

我正在尝试searchDisplayController通过在 parse.com 上搜索对象来将结果过滤到 a 中。我可以成功搜索对象并使用 containsString 显示它们,但这不是我想要搜索对象的方式。我想使用containsAllObjectsInArray. 我不知道我是否以正确的方式进行此操作,但无论如何这是我正在尝试的代码:

- (void)filterResults:(NSString *)searchTerm {
NSCharacterSet *whitespaces = [NSCharacterSet whitespaceCharacterSet];
NSPredicate *noEmptyStrings = [NSPredicate predicateWithFormat:@"SELF != ''"];
NSArray *parts = [searchTerm componentsSeparatedByCharactersInSet:whitespaces];
NSArray *filteredArray = [parts filteredArrayUsingPredicate:noEmptyStrings];
NSLog(@" filteredArray equals %@", filteredArray);

[self.searchResults removeAllObjects];

PFQuery *query = [PFQuery queryWithClassName: @"Items"];
[query whereKeyExists:@"itemName"];  
[query whereKeyExists:@"itemDescription"]; 
[query whereKey:@"itemName" containsAllObjectsInArray:filteredArray];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if(!error){
        for (PFObject *object in objects){

            NSLog(@"%@", objects);
            NSLog(@"%u", objects.count);   
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.searchResults removeAllObjects];
            [self.searchResults addObjectsFromArray:objects];
            [self.searchDisplayController.searchResultsTableView reloadData];
        });
    } else {
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}];
}

在我的输出中,我收到了错误:

code = 102;
error = "$all only works on array fields";

我不明白为什么这不起作用,因为过滤后的数组显然是一个数组,并且过滤后的数组正在输出中正确生成。

4

1 回答 1

3

我相信您的问题是您正在尝试搜索不是数组的字段(如错误所述)。

whereKey:containsAllObjectsInArray:方法意味着匹配字段(数组)包含所提供数组中所有元素的任何记录。

例如:

Name: "Joe"
Moves: [ "Punch", "Kick", "Body Slam" ]

Name: "Jane"
Moves: [ "Punch", "Kick", "Eye Gouge" ]

Moves使用包含“Punch”和“Kick”的数组在场地上搜索将匹配两个记录,因为它们的数组中都有这些移动。搜索包含“Kick”和“Body Slam”的数组只会匹配 Joe。

相反,如果您想在字符串字段中查找包含单词列表的记录,则需要对数组中的每个单词执行whereKey:containsString:调用,实际上是 AND 查询。

于 2013-09-03T01:23:31.140 回答