2016-06-09 33 views
0

我需要創建一個搜索欄來搜索產品。爲此,我使用searchcontroller,並且我有一個按名稱搜索產品的API。我想要這個:從api搜索時正在處理的動畫指標。我如何解決這個問題? 這是我從API搜索代碼:seachbar搜索時的開始指示燈

func getTovar(){ 

    Alamofire.request(.GET, "myApiurl") 
     .responseJSON { response in 
      guard response.result.error == nil else { 
       // got an error in getting the data, need to handle it 
       print("error calling GET on /todos/1") 
       print(response.result.error!) 
       self.indicator.stopAnimating() 
       UIApplication.sharedApplication().networkActivityIndicatorVisible = false 

       return 
      } 

      if let value = response.result.value { 
       // handle the results as JSON, without a bunch of nested if loops 
       let product = JSON(value) 
       for (_,subJson):(String, JSON) in product { 

        let img:NSData 
        if let src=subJson["sphoto"].string{ 

         if src.containsString("jpg"){ 
          let range = src.startIndex.advancedBy(2)..<src.endIndex 
          let substring = src[range] 
          var urlString = "http://admin.unimax.kz/\(substring)" 
          urlString = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 
          if let dataFromURL=NSData(contentsOfURL: NSURL(string: urlString)!){ 
           img=dataFromURL 
          } 
          else{ 
           img=NSData(contentsOfURL: NSURL(string: "http://zhaksy-adam.kz/Images/domalak.png")!)! 
          } 
         } 
         else{ 
          img=NSData(contentsOfURL: NSURL(string: "http://zhaksy-adam.kz/Images/domalak.png")!)! 
         } 
        } 
        else{ 
         img=NSData(contentsOfURL: NSURL(string: "http://zhaksy-adam.kz/Images/domalak.png")!)! 
        } 

        //Do something you want 
        let id=subJson["id"].int! 
        let name=subJson["name"].string! 
        let price=subJson["price"].int! 
        let description=subJson["description"].rawString() 
        self.data.append(Product(id:id,title: name, img: UIImage(data: img), price: price,desc:description!)) 
       } 
      } 
    } 
} 

這是我的搜索結果更新:

func updateSearchResultsForSearchController(searchController: UISearchController) 
{ 
    searchController.searchBar.addSubview(indicator) 
    indicator.stopAnimating() 

    getTovar() 

    for item in data { 
     if item.productTitle.containsString(searchController.searchBar.text!){ 
      filteredTableData.append(item) 
     } 

    } 

    indicator.stopAnimating() 
    self.tableView.reloadData() 
} 
+1

您的WebService調用是異步的。所以它不按你想要的順序工作。 – Larme

+0

我該怎麼做? –

回答

0

你需要改變你這樣的代碼 更改getTover這樣

func getTovar(){ 

    Alamofire.request(.GET, "myApiurl") 
     .responseJSON { response in 
      guard response.result.error == nil else { 
       // got an error in getting the data, need to handle it 
       print("error calling GET on /todos/1") 
       print(response.result.error!) 
       self.indicator.stopAnimating() 
       UIApplication.sharedApplication().networkActivityIndicatorVisible = false 
       indicator.stopAnimationg() 
       return 
      } 

      if let value = response.result.value { 
       // handle the results as JSON, without a bunch of nested if loops 
       let product = JSON(value) 
       for (_,subJson):(String, JSON) in product { 

        let img:NSData 
        if let src=subJson["sphoto"].string{ 

         if src.containsString("jpg"){ 
          let range = src.startIndex.advancedBy(2)..<src.endIndex 
          let substring = src[range] 
          var urlString = "http://admin.unimax.kz/\(substring)" 
          urlString = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 
          if let dataFromURL=NSData(contentsOfURL: NSURL(string: urlString)!){ 
           img=dataFromURL 
          } 
          else{ 
           img=NSData(contentsOfURL: NSURL(string: "http://zhaksy-adam.kz/Images/domalak.png")!)! 
          } 
         } 
         else{ 
          img=NSData(contentsOfURL: NSURL(string: "http://zhaksy-adam.kz/Images/domalak.png")!)! 
         } 
        } 
        else{ 
         img=NSData(contentsOfURL: NSURL(string: "http://zhaksy-adam.kz/Images/domalak.png")!)! 
        } 

        //Do something you want 
        let id=subJson["id"].int! 
        let name=subJson["name"].string! 
        let price=subJson["price"].int! 
        let description=subJson["description"].rawString() 
        self.data.append(Product(id:id,title: name, img: UIImage(data: img), price: price,desc:description!)) 
       } 
       indicator.stopAnimationg() 
       for item in data { 
        if item.productTitle.containsString(searchController.searchBar.text!){ 
         filteredTableData.append(item) 
        } 
       } 
       self.tableView.reloadData() 
      } 
    } 
} 

並且像這樣改變你的updateSearchResultsForSearchController

func updateSearchResultsForSearchController(searchController: UISearchController){ 
    searchController.searchBar.addSubview(indicator) 
    indicator.startAnimating() 
     getTovar() 
} 

希望這會有所幫助。

+0

感謝您的回答!但指示燈仍然沒有動畫 –

+0

你用我的代碼替換了這兩個功能。 –

+0

謝謝我解決我的問題 –