2015-12-13 2 views
1

Когда я вызываю refreshResults("test"), все результаты поиска по-прежнему отображаются, а не те, которые ТОЛЬКО содержат «тест» в столбце business_name в Parse. Массивы, которые я печатаю при использовании фильтра, содержат данные, хотя и неправильные данные.Поиск с фильтром не работает правильно - Parse, Swift

Целью этого является простой поиск - он должен возвращать все результаты, содержащие фильтр. Пример: поиск «лица» будет возвращать лицо, facebook, лицо, лица и т. Д., Потому что все эти результаты содержат фильтр «лицо» в них. Я сравниваю фильтр с полем business_name, чтобы проверить, соответствуют ли какие-либо фильтры соответствию.

Значение is_person всегда неверно, потому что я ищу предприятия, а не лица.

Вот код:

func refreshResults(strFilter: String) { 
    let progressIndicator = MBProgressHUD.showHUDAddedTo(self.view, animated: true) 
    progressIndicator.labelText = "Loading..." 

    resultsCompEmailArray.removeAll(keepCapacity: false) 
    resultsCompNameArray.removeAll(keepCapacity: false) 
    resultsCompProfilePicArray.removeAll(keepCapacity: false) 

    if (!strFilter.isEmpty) { 
     print("searching with filter: ", strFilter) 

     let q1 = PFQuery(className: "_User") 
     q1.whereKey("is_person", equalTo: false) 
     let q2 = PFQuery(className: "_User") 
     q2.whereKey("business_name", containsString: strFilter) 
     let otherQuery = PFQuery.orQueryWithSubqueries([q2, q1]) 

     otherQuery.findObjectsInBackgroundWithBlock({ (objects: [PFObject]?, error:NSError?) -> Void in 
      MBProgressHUD.hideAllHUDsForView(self.view, animated: true) 
      if (error == nil) { 
       for obj in objects! { 
        self.resultsCompNameArray.append(obj.objectForKey("business_name") as! String) 
        self.resultsCompEmailArray.append(obj.objectForKey("username") as! String) 
        if let profilePic = obj.objectForKey("profile_picture") as? PFFile { 
         self.resultsCompProfilePicArray.append(profilePic) 
        } 
        self.resultsTable.reloadData() 
        print(self.resultsCompNameArray) 
       } 
      } 
     }) 
    } 
} 

Любые полезные комментарии оценили, кроме глупости для кого-то другого. Благодарю.

+0

Таким образом, вы не хотите, данные с 'is_person = false' то не имеют нефильтрованное' business_name', верно? – adolfosrs

+0

Мне нужны результаты поиска, чтобы отобразить любое имя business_name, пока оно находится в поисковом фильтре. Пример: поиск fo возвращает foo, foos, food, fodey, потому что все они содержат fo в них. Часть is_person всегда будет ложной, потому что я ищу предприятия в своей базе данных, а не лица - вот как я их разделяю. - все это очень похоже на простой поиск Google, все результаты, содержащие условия поиска, всплывают. – user3892791

ответ

0

Проблема в том, что вы выполняете ИЛИ по вашему запросу. Таким образом, вы извлекаете данные с is_person == false ИЛИ, которые содержат отфильтрованную строку. Таким образом, ваши результаты, вероятно, содержат объекты, которые не соответствуют фильтру, но флаг is_person является ложным.

Чтобы решить эту проблему вы можете сделать следующее:

let query = PFQuery(className: "_User") 
     query.whereKey("is_person", equalTo: false) 
     query.whereKey("business_name", containsString: strFilter) 

     query.findObjectsInBackgroundWithBlock({ (objects: [PFObject]?, error:NSError?) -> Void in 
      MBProgressHUD.hideAllHUDsForView(self.view, animated: true) 
      if (error == nil) { 
       for obj in objects! { 
        self.resultsCompNameArray.append(obj.objectForKey("business_name") as! String) 
        self.resultsCompEmailArray.append(obj.objectForKey("username") as! String) 
        if let profilePic = obj.objectForKey("profile_picture") as? PFFile { 
         self.resultsCompProfilePicArray.append(profilePic) 
        } 
        self.resultsTable.reloadData() 
        print(self.resultsCompNameArray) 
       } 
      } 
     }) 
+0

Приветствую вас за отзыв. Это было полезно. Я отправил свой ответ, чтобы все увидели. – user3892791

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