2017-05-14 3 views
0

Die Aufträge werden als Order Objekte gespeichert: let orders = [Order]()Refresh UITableView

Die Idee ist meine API jede Sekunde rufen und wenn eine neue Zelle erstellt wird, sollte die Tabelle in die neue Zelle zeigen.

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

Dieser Code aktualisiert meine Funktion, um Daten zu erhalten, wiederholt aber die Zelle !!

so am Anfang des GetOrders Funktion löschen I das Array dann laden sie mit neuen Array von API.

, aber der Code bricht ab, wenn der neue Auftrag aus der Datenbank gelöscht wird. Es zeigt den Tisch an. Wenn ich auf den Rücksendungen klicken Sie auf ‚Index außerhalb des zulässigen Bereichs‘, weil dieser Funktion

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

Ich denke, Ihre Zellen alle Sekunden duplizieren ..? –

+0

@AnilKumar Bitte schauen Sie sich meine aktualisierte Frage an – leo0019

+0

laden Sie die Tabellenansicht neu, wenn Sie die Daten von der API bekommen haben? –

Antwort

0

Haben Sie auf dem Mainthread versucht gehen?

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

ja ich habe es versucht noch zermalmt – leo0019