【问题标题】:Searching with filter, not working correctly - Parse, Swift使用过滤器搜索,无法正常工作 - Parse,Swift
【发布时间】:2016-03-18 19:31:44
【问题描述】:

当我调用refreshResults("test") 时,仍会显示所有搜索结果,而不是在 Parse 的 business_name 列中仅包含“test”的搜索结果。我使用过滤器时打印的数组包含数据,但数据有误。

这样做的目的是进行简单的搜索 - 它是返回包含过滤器的所有结果。示例:搜索“face”将返回 face、facebook、face、faces 等,因为这些结果都包含过滤器“face”。我正在将过滤器与 business_name 字段进行比较,以查看是否有任何过滤器返回匹配项。

is_person 值始终为 false,因为我正在搜索企业而不是人员。

代码如下:

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)
                }
            }
        })
    } 
}

感谢任何有用的 cmets,将愚蠢留给其他人。谢谢。

【问题讨论】:

  • 那么,你不想要is_person=false 没有过滤的business_name 的数据,对吧?
  • 我需要搜索结果显示任何业务名称,只要它在搜索过滤器中。示例:搜索 fo 会返回 foo、foos、food、fodey,因为它们都包含 fo。 is_person 部分总是错误的,因为我在我的数据库中搜索企业而不是人员 - 这就是我将它们分开的方式。 -- 所有这些都非常类似于简单的谷歌搜索,所有包含搜索词的结果都会弹出。

标签: arrays swift search parse-platform filter


【解决方案1】:

问题是您正在对查询进行 OR。因此,您正在检索具有 is_person==false 或包含过滤字符串的数据。因此,您的结果可能包含不适合过滤器但 is_person 标志为 false 的对象。

要解决此问题,您可以执行以下操作:

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)
                }
            }
        })

【讨论】:

  • 您好,感谢您的反馈。这很有帮助。我已经发布了我的答案供大家查看。
猜你喜欢
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
相关资源
最近更新 更多