Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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
Ios 在Swift 3中更改UITextField中的文本时调用web服务_Ios_Swift_Swift3_Uitextfield - Fatal编程技术网

Ios 在Swift 3中更改UITextField中的文本时调用web服务

Ios 在Swift 3中更改UITextField中的文本时调用web服务,ios,swift,swift3,uitextfield,Ios,Swift,Swift3,Uitextfield,我正在做这样的事情 在myviewdidAppear()中,我正在调用我的web服务并获取数据 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(true) if(dm.shouldRefresh) { com.showProgress() self.getStaffData() { (status) in self.com.re

我正在做这样的事情

  • 在my
    viewdidAppear()
    中,我正在调用我的web服务并获取数据

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(true)
    
        if(dm.shouldRefresh)
        {
            com.showProgress()
            self.getStaffData() { (status) in
                self.com.removeProgress()
    
                if(status)
                {
                    if(self.arrayDirectory != nil && self.arrayDirectory.count>0)
                    {
                        print("-----Directory data loaded----")
                        self.arrayPreviouslyLoadedArray=self.arrayDirectory
    
                        if(self.isfirstTime)
                        {
                            self.setupFaces()
                            self.isfirstTime=false
                        }
                        else
                        {
                            self.facesCarousel.reloadData()
                        }
                    }
                    else
                    {
                        self.addEmptyLabel()
                    }
                }
                else
                {
                    self.com.showAlertMessage()
                    self.addEmptyLabel()
                }
            }
    
            self.dm.shouldRefresh=false
        }
    }
    
  • 加载表后,我想在此表上执行搜索功能。为了搜索,我使用了
    UITextField

    func searchTextFieldEditingChanged()
    {
        if(txtSearch.text != "")
        {
            self.searchText=txtSearch.text
            //NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(search), object: nil)
            self.search()
        }
        else
        {
            self.arrayDirectory=self.arrayPreviouslyLoadedArray
           facesCarousel.reloadData()
        }
    }
    
  • 到目前为止,这一切都很好。但当它在当前数组中找不到匹配字符串时,问题就来了。最初,我从服务加载20条记录。我正在寻找“大卫”这个名字。但是这个名字不包括在我的前20张唱片中。在我接下来的20张唱片里都有。但我的服务没有搜索功能。但我如何以正常方式执行此搜索功能?基本上我想要的是

  • 第一次加载20条记录
  • 重新装填我的桌子
  • 在文本字段中键入搜索查询
  • 检查我的前20条记录中是否有该文本
  • 如果可用,请重新加载我的表
  • 如果不可用,则使用接下来的20条记录
  • 执行搜索
  • 如果不可用,从服务中选择下一个20并执行搜索
  • 这就是我想做的。我已经做到了第四点。这意味着我可以从我的前20条记录中搜索一个单词。我试图设置一个标志并运行服务调用,直到它变为现实

    func search()
    {
        self.isSearching=true
        self.isfound=false
        //let exists = NSPredicate(format: "DisplayName2 CONTAINS[cd] \(searchText!)")
        let arrayTofilter:[[String:Any]]=self.arrayDirectory as! [[String : Any]]
        let aList = arrayTofilter.filter {
            ( $0 ["DisplayName2"] as! String).range(of: searchText!, options: [.diacriticInsensitive, .caseInsensitive]) != nil
        }
    
        if(aList.count>0)
        {
            arrayDirectory=aList
            facesCarousel.reloadData()
            isfound=true
        }
        else
        {
            repeat
            {
                self.loadAgain()
            }
    
            while isfound==false
        }
    }
    
    但这并不像我预期的那样有效。请给我一个更好的解决方案。
    谢谢

    你不需要旗帜。为了实现您的目标,您只需在找不到数据时反复调用搜索函数。这是伪代码

    func search() {
        array.findYourObject
    
        if found {
            tableView.reloadData()
        } else {
            self.getStaffData() { (status) in
                array += newlyFetched20Results
                search()// You probably want to add some condition here to stop it from searching forever
            }
        }
    
    }
    

    请格式化您的代码。这是unreadable@cb89很抱歉我更新了