2017-11-22 5 views
0

Ich habe 2 Controller, DashboardController und LocateVehicleController. LocateVehicleController hat UITableViewController.Refresh UITableViewController Daten

In DashboardController, auf die Schaltfläche drücken, ich mache API-Aufruf und Daten abrufen. Und das Senden eines Arrays an LocateVehicleController.

let locateVehicleStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
let locateVehicleController = locateVehicleStoryboard.instantiateViewController(withIdentifier: "tempID") as? LocateVehicle 
self.present(locateVehicleController!, animated: true, completion: nil) 
locateVehicleController?.dataArray = self.locateVehicleDataArr 
locateVehicleController?.tableView.reloadData() 

In LocateVehicleController habe ich Refresh-Button Wenn ich Refresh-Button drücken Ich brauche die Tableview-Controller-Daten zu aktualisieren, die ich API-Aufruf Daten aus DashboardController verwendet haben.

Nach meinem Verständnis, wenn ich die Schaltfläche "Aktualisieren" drücken, wird der gleiche API-Aufruf aufgerufen. Bitte helfen Sie das zu lösen. Danke im Voraus.

+0

was ist das Problem, mit dem Sie konfrontiert werden? "Nach meinem Verständnis, wenn ich die Schaltfläche" Aktualisieren "drücke, ruft der gleiche API-Aufruf auf" Sie haben bereits API-Daten im Array gespeichert, übergeben Sie das Array einfach an den zweiten Controller und laden Sie die Tabelle entsprechend neu. Kein erneutes Aufrufen der gleichen API im zweiten Controller. –

+0

@TusharSharma es ist wieder du, danke für die Antwort. Ich habe alles gemacht und Daten in uitableview gezeigt. Wenn ich den Knopf im zweiten Controller aktualisiere, wie er das Array aktualisiert, das im Firstview-Controller präsentiert wird. – MinnuKaAnae

+0

Wie Sie bereits erwähnt haben, haben Sie das Array von der ersten Ansicht zur zweiten Ansicht weitergeleitet. Sie haben jetzt also ein Array mit Ihren Daten (dataArray). Laden Sie die Tabelle einfach neu und verwenden Sie dieses Array zum Auffüllen. –

Antwort

0

Ich würde die Logik des Aufrufs dieser API in eine andere Klasse verschieben. Injizieren Sie diese Klasse in DashboardController und LocateVehicleController und verwenden Sie es, um Daten abzurufen. Etwas wie dieses:

struct Vehicle { 
} 

protocol VehicleDataFetcherProtocol { 
    func getVehicleData(completionHandler:([Vehicle])->()) // assuming the data is in form of an Array of a class/struct Vehicle 
} 

class VehicleDataFetcher: VehicleDataFetcherProtocol { 
    // Hit API, get data and call the completion hanlder 
    func getVehicleData(completionHandler:([Vehicle])->()) { 

    } 
} 

class DashboardController:UIViewController { 
    private var vehicleDataFetcher: VehicleDataFetcher! 

    func injectVehicleDataFetcher(dataFetcher:VehicleDataFetcher) { 
     self.vehicleDataFetcher = dataFetcher 
    } 

    func presentLocateVehicle() { 
     let locateVehicleStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let locateVehicleController = locateVehicleStoryboard.instantiateViewController(withIdentifier: "tempID") as? LocateVehicleController 
     self.present(locateVehicleController!, animated: true, completion: nil) 
     locateVehicleController?.injectVehicleDataFetcher(dataFetcher: self.vehicleDataFetcher) 
     locateVehicleController?.dataArray = self.locateVehicleDataArr 
     locateVehicleController?.tableView.reloadData() 
    } 
} 

class LocateVehicleController:UIViewController { 
    private var vehicleDataFetcher: VehicleDataFetcher! 

    func injectVehicleDataFetcher(dataFetcher:VehicleDataFetcher) { 
     self.vehicleDataFetcher = dataFetcher 
    } 


} 
Verwandte Themen