Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用筛选器搜索,工作不正常-解析,Swift_Arrays_Swift_Search_Parse Platform_Filter - Fatal编程技术网

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部分总是错误的,因为我在数据库中搜索的是业务,而不是人员-这就是我如何将他们分开的。-所有这些都非常类似于一个简单的谷歌搜索,所有包含搜索词的结果都会弹出。您好,谢谢您的反馈。这很有帮助。我已经把我的答案公布给大家看。