PFQuery с несколькими ограничениями на один ключ

У меня есть база данных parse.com. У меня есть столбец в таблице с именем «текст». Я должен найти текст с несколькими ключами, соответствующими условию И. Я пробовал все это. я пытался использовать:

PFQuery *query=[PFQuery queryWithClassName:@"post"]; [query whereKey:@"text" containedIn:Array]; 

или

  PFQuery *query=[PFQuery queryWithClassName:@"post"]; [query whereKey:@"text" containsAllObjectsInArray:Array]; 

или

 PFQuery *query=[PFQuery queryWithClassName:@"post"]; for (NSString *str in filtersArray) { [query whereKey:@"text" containsString:str]; } 

но никто не работает. пожалуйста, помогите мне, если parse sdks поддерживает это или не полностью? если да, то как я могу достичь результатов. Спасибо заранее 🙂

Eidt:

например, у меня есть три записи в базе данных в виде текста:

  1. «У меня есть ввод данных»

  2. «Я не могу найти что-то в данных»

  3. "как я могу это сделать"

если передать «i» и «this», он должен вернуть запись (3)

если передать «i» и «данные», он должен возвращать запись (1,2)

если передать «i» и «else», он ничего не должен возвращать

Причина, по которой ваш запрос не работает, заключается в том, что Parse не поддерживает одно и то же ограничение (в данном случае «containsString:») более одного раза на одном и том же ключе.

Итак, я бы предложил запросить регулярное выражение, которое будет соответствовать всем вашим строкам фильтра, используя - (instancetype)whereKey:(NSString *)key matchesRegex:(NSString *)regex .

 NSArray *qryStrings = @[str1, str2, str3, ....]; //strings you are trying to match //string which will hold our regular expression NSString *regexString = @"^"; //start off the regex for (NSString *str in qryStrings) { //build the regex one filter at a time regexString = [NSString stringWithFormat:@"%@(?=.*%@)", regexString, str]; } regexString = [NSString stringWithFormat:@"%@.*$", regexString]; //finish off the regex PFQuery *query = [PFQuery queryWithClassName:@"post"]; [query whereKey:@"text" matchesRegex:regexString]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (!error) { //objects array contains matching rows with matching strings } else { NSLog(@"%@ %@", error, [error userInfo]); } }]; 

В зависимости от требований к скорости вашего запроса и количества запрашиваемых объектов, я бы попытался разделить результаты с помощью componentsSeparatedByString: после перечисления через массив результатов, используя что-то вроде: for(NSString *string in results) . После разделения каждой строки на отдельный массив используйте оператор if(...) который определяет, содержит ли эта коллекция слов каждое искомое слово.

Пример кода:

 NSMutableArray *searchResults = [[NSMutableArray alloc] init]; PFQuery *query=[PFQuery queryWithClassName:@"post"]; // consider setting a limit, depending on the number of posts // consider sorting the query as needed NSArray *posts = [query findObjects]; for(NSString *text in posts) { NSArray *words = [text componentsSeparatedByString:@" "]; // use SeperatedByCharactersInSet: for . , or anything else you'd need switch ([filterArray count]) { case 1: if([words containsObject:filterArray[0]]) { [searchResults addObject:text]; } break; case 2: if([words containsObject:filterArray[0]] && [words containsObject:filterArray[1]]) { [searchResults addObject:text]; } break; // case n: // if([words containsObject:filterArray[0]] && // [words containsObject:filterArray[1]] && // [words containsObject:filterArray[n]]) // { // [searchResults addObject:text]; // } // // break; default: break; } _filteredResults = [NSArray arrayWithArray:searchResults]; // local global instance of results - use for maintaining order (be sure to clear it between searches) 

Массив _filteredResults должен быть тем, что вы хотите. Обязательно рассмотрите скорость и разделители символов, используемые в поиске.

Вам просто нужно использовать whereKey: containsString:

И если вы хотите использовать дополнительные параметры, просто добавьте subQuery

Ваше решение нужно немного изменить.

Как это.

 PFQuery *query=[PFQuery queryWithClassName:@"post"]; [query whereKey:@"text" containedIn:Array]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { //what your logic you want to write there might comes some records that are counts two times so you can remove those using NSSet }]; 
  • Google Map SDK на IOS Apple Mach-O Linker Error
  • Требуется ли 24 часа для записи пользовательских событий в Parse Analytics?
  • Автоматизирует ли Parse данные из Facebook?
  • Уведомление о сбое с помощью синтаксиса
  • cocoapods 0.37.1 - при обновлении подфайла фреймворки больше не связаны
  • Как получить данные в отношении, используя parse.com
  • При удалении ячейки и в PFQueryTableViewController она получает ошибку Assertion в
  • Данные анализа не отображаются в iOS 9 Beta 4
  • Parse iOS в проверке покупки приложения из Cloud Code
  • Сохранить любой несохраненный PFObject Даже пользователь завершает работу приложения
  • Parse iOS SDK: настройка облачного кода в терминале
  • Interesting Posts

    отменять событие касания во время касанияMoved

    Проблема с iPhone UIWebView

    UITextField горизонтальное выравнивание текста – текст не центрирован

    Почему Safari на iOS не показывает мой плакат с видео в формате HTML5?

    Установить старые коко-каподы?

    в покупке приложения – расходный продукт

    Анимация пользовательского свойства UIView в Swift

    Xcode 7 / Swift 2.1 "Сообщение от отладчика: завершено из-за проблемы с памятью"

    Увеличение UISlider на 1 в диапазоне от 1 до 100

    AVFoundation: Видео для работы с текстурой OpenGL – Как играть и синхронизировать звук?

    Обнаружение лица и масштабирование с помощью ImageView не совсем работают из-за масштабирования?

    Автоматическая компоновка не установлена ​​должным образом, если для кнопок с одинаковой шириной ограничены кнопки

    iOS рисовать заполненные кружки

    Как я могу «отменить и запросить» мой профиль разработчика iOS?

    Попытка создать загрузочную панель App Store

    Давайте будем гением компьютера.