Parse.com查询String是否包含在Array中

时间:2014-01-19 23:20:47

标签: ios objective-c search filter parse-platform

使用食谱,我想根据食谱中的项目而不是食谱名称查询(搜索)。

例如,多个项目可能包含鸡肉。我希望能够搜索鸡肉并查看食谱中含有鸡肉的食谱名称。

以下是我的尝试:

- (void)filterResults:(NSString *)searchTerm
{
     PFQuery * query = [PFQuery queryWithClassName:self.parseClassName];
     NSArray * ingredientArray = [self.profileObject objectForKey:@"ingredients"];
     [query whereKey:searchTerm containedIn:ingredientArray];

     [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (error)
        {
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
        else
        {
            [self.searchResults removeAllObjects];
            [self.searchResults addObjectsFromArray:objects];
            [self.searchDisplayController.searchResultsTableView reloadData];
        }
    }];

}

此代码不返回任何内容,我没有错误。

难以找到设置查询的正确方法。

这应该作为查询中的查询来解决吗?

含义:

首先通过成分查询,然后查询,根据之前包含searchTerm的食谱查询显示食谱名称。

2 个答案:

答案 0 :(得分:2)

我认为您滥用[query whereKey:containedIn:]方法。这用于查询所有PFObject,其中您指定的键的对象包含在您提供的数组中。除非您为每个食谱项目创建了一个新密钥,否则这不适用于您的目的,因为您的对象中没有一个具有“鸡”键。

首先,我建议您在Parse中使用RecipeIngredient类,其中包含以下字段:

  • 指针(配方)配方//指向其Recipe对象的指针
  • 数量//单位数
  • 字符串单位// cup,gram等
  • 肉串成分//牛奶,面粉等

现在,您可以像这样查询RecipeIngredient类:

PFQuery * query = [PFQuery queryWithClassName:"RecipeIngredient"];
[query whereKey:"ingredient" equalTo:searchTerm];
[query includeKey:"recipe"]; //Fetches the Recipe data via the pointer
[query findObjectsInBackgroundWithBlock:^(NSArray *recipeIngredientObjects, NSError *error) {
     if (!error) {
         NSArray *recipes = [recipeIngredientObjects valueForKey:@"recipe"];
         //update table data as needed
     } else {
         // Log details of the failure
         NSLog(@"Error: %@ %@", error, [error userInfo]);
     }
}];

答案 1 :(得分:1)

去年我有这个问题,所以我想我会分享答案。

    [query whereKey:@"ingredient" matchesRegex:searchTerm modifiers:@"i"];

那应该为你做。这有助于区分大小写。