2017-05-14 69 views
0

的订单都被存储为Order对象:let orders = [Order]()刷新UITableView的

的想法是叫我的API每一秒,并创建一个新的小区时,这个表应该显示新的细胞。

 var timer = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: "GetOrders", userInfo: nil, repeats: true) 

此代码确实刷新我的函数来获取数据,但重复单元格!

所以在GetOrders函数的开头我擦除数组然后上传它与新的数组从API。

func GetOrders(){ 

orders = [] 

但是当从数据库中删除新订单时,代码会崩溃。它显示了他的表格。当我点击它的回报“索引超出范围”,因为这个功能

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    tableView.deselectRow(at: indexPath, animated: true) 
    let order = orders[indexPath.row] 
    guard orders.count > indexPath.row else { 
     print("Index out of range") 
     return 
    } 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    var viewController = storyboard.instantiateViewController(withIdentifier: "viewControllerIdentifer") as! OrderDetailsController 
    viewController.passedValue = order.id 
    self.present(viewController, animated: true , completion: nil) 



} 

UPDATE的

func GetOrders(){ 

    orders = [] 
    print("hi") 

    let urlStr = "api/orders" 
    let url = URL(string: urlStr) 


    let user = "api" 
    let password = "Apipass" 



    var headers: HTTPHeaders = [ 
     "Authorization": "Basic YXBpdXNlcjpBcGlBdXRoUGFzczIwMTchQCM=" 
    ] 


    Alamofire.request(url!, method: .get ,encoding: URLEncoding.default, headers: headers).responseJSON { response in 

     if let value: AnyObject = response.result.value as AnyObject? { 
      //Handle the results as JSON 
      let data = JSON(value) 


      for (key,subJson):(String, JSON) in data[0] { 
       //Do something you want 



       let logo = subJson["family"]["logo"] 

       let logoString = "img/\(logo)" 



       if let date = subJson["family"]["updated_at"].string { 
        print(date) 
        if let cleintName = subJson["client"]["name"].string { 



                let info = Order(shopname: shopname, shopaddress: shopaddr, clientName: cleintName, ClientAddress: clientAddres, PerferTime: time, Cost: subtotal , date : time , Logo : logoString ,id : id) 



                self.orders.append(info) 


               } 

               self.tableview.reloadData() 

              } 

             } 
+0

我想你的细胞每秒都在复制..? –

+0

@AnilKumar请看看我更新的问题 – leo0019

+0

当你从api获取数据时,你是否重新载入tableview? –

回答

0

您是否尝试过事的mainthread?

DispatchQueue.main.async { 
    self.tableView.reloadData() 
} 
+0

是的,我试过它仍然粉碎 – leo0019