2014-01-19 6 views
1

Работа с рецептами, и я хотел бы запросить (искать) на основе элементов в рецепте, а не в названиях рецептов.Parse.com Запрос, если String содержится в массиве

Например, несколько предметов могут содержать курицу. Я хочу, чтобы иметь возможность искать Цыпленок и видеть названия рецептов, которые содержат курица в рецепте.

Вот что я пробовал:

- (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.

+0

Пожалуйста, не заставляйте нас угадывать. Какая у вас проблема? Что происходит с кодом, который вы опубликовали? – rmaddy

ответ

2

Я думаю, вы неправильно используете метод [query whereKey:containedIn:]. Это используется для запроса всех PFObject, где объект для указанного вами ключа содержится в массиве, который вы предоставляете. Если вы не создали новый ключ для каждого элемента рецепта, это не будет работать для ваших целей, потому что ни один из ваших объектов не имеет ключа «Курица», например.

Во-первых, я предлагаю вам использовать RecipeIngredient класс в Parse со следующими полями:

  • Pointer (рецепт) рецептур // указатель на его Recipe объекта
  • сумма Количество // сколько единицы
  • Строка блок // чашка, граммы и т.д.
  • Струнного ингредиент // молоко, мука и т.д.

Теперь вы можете просто запросить 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]); 
    } 
}]; 
+0

Спасибо. Я вырыл намного больше в эту последнюю ночь, и я обнаружил, что searchTerm должен соответствовать дословно, что находится в массиве. Поэтому, если у меня есть «1 стакан муки», я должен набрать все это. Идеально я хотел бы искать только муку и получить результат. –

+0

Ответ отредактирован, чтобы показать, как настроить парсер, чтобы иметь возможность поиска определенных имен ингредиентов – bobbyrehm

+0

@LukeIrvin Вы нашли решение этого? У меня также есть эта проблема. –

1

в прошлом году у меня была эта проблема когда-то, так что я думал, что я разделю ответ.

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

Это должно сделать это за вас. Это помогает с чувствительностью к регистру.

Смежные вопросы