Arrays 使用筛选器搜索,工作不正常-解析,Swift
当我调用Arrays 使用筛选器搜索,工作不正常-解析,Swift,arrays,swift,search,parse-platform,filter,Arrays,Swift,Search,Parse Platform,Filter,当我调用refreshResults(“test”)时,仍会显示所有搜索结果,而不是在Parse的business\u name列中仅包含“test”的搜索结果。当我使用过滤器时打印的数组包含数据,尽管数据是错误的 这是一个简单的搜索——返回包含过滤器的所有结果。示例:搜索“face”将返回face、facebook、face、faces等,因为这些结果中都包含过滤器“face”。我将过滤器与business_name字段进行比较,以查看是否有任何过滤器返回匹配项 is_person值总是错误的
refreshResults(“test”)
时,仍会显示所有搜索结果,而不是在Parse的business\u name列中仅包含“test”的搜索结果。当我使用过滤器时打印的数组包含数据,尽管数据是错误的
这是一个简单的搜索——返回包含过滤器的所有结果。示例:搜索“face”将返回face、facebook、face、faces等,因为这些结果中都包含过滤器“face”。我将过滤器与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)
}
}
})
}
}
任何有用的评论都值得欣赏,把愚蠢留给别人吧。谢谢。问题是您正在对查询执行OR。因此,您正在检索具有is_person==false或包含筛选字符串的数据。因此,您的结果可能包含不符合筛选器的对象,但is\u 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)
}
}
})
因此,您不希望数据
为\u person=false
且未过滤业务名称,对吗?我需要搜索结果来显示任何业务名称,只要它在搜索筛选器中。示例:搜索fo会返回foo、foos、food、fodey,因为它们都包含fo。is_person部分总是错误的,因为我在数据库中搜索的是业务,而不是人员-这就是我如何将他们分开的。-所有这些都非常类似于一个简单的谷歌搜索,所有包含搜索词的结果都会弹出。您好,谢谢您的反馈。这很有帮助。我已经把我的答案公布给大家看。