2016-05-12 9 views
0

Ich versuche, Daten aus einem API zu extrahieren, um meine Tabelle aufzufüllen, aber es wird nichts angezeigt. Wie kann ich es reparieren?REST-API: Tabelle kann nicht ausgefüllt werden

AKTUALISIERT Wenn ich die GET-Anforderung entweder in viewDidLoad() oder viewDidAppear() Ich würde

Ergebnis GET ein leeres Array erhalten wird []

I haben versucht Hinzufügen von self.tableView.reload() zur viewDidLoad() aber würde diesen Fehler geworfen werden

Mehrdeutige Referenz an das Mitglied 'Tableview (_: numberOfRowsInSection :)

Dies ist meine JSON-Antwort

[ 
{ 
"schedule_job_id": 23, 
"start_date": "2016-05-01", 
"end_date": "2016-05-08", 
"building_id": 2, 
"building_name": "Republic Plaza", 
"building_block_no": "69A", 
"building_street_name": "9 Raffles Place Downtown Core", 
"building_postal_code": "233645", 
"checklist_id": "1", 
"checklist_name": "Lightning protection", 
"checklist_due_date": "2016-04-12 17:00:00", 
"tasks": [ 
    { 
    "submission_id": 105, 
    "task_id": "1", 
    "task_name": "Inspect Carpark", 
    "task_checked": true, 
    "task_submitted_date": "2016-05-04 04:39:01", 
    "task_comment": null, 
    "task_building_level": "1", 
    "task_description": "", 
    "task_status": "OK", 
    "total_rating": null, 
    "safety_ratings": [ 
     { 
     "submission_id": 105, 
     "safety_rating_id": 79, 
     "task_id": "1", 
     "name": "Equipment", 
     "points": "10", 
     "score": "0" 
     } 
    ], 
    "photos": [] 
    } 
] 

Das ist mein GET-Anfrage

override func viewDidLoad() { 
    usernameLabel.text = Data.sharedInstance.userName 
    let url = "http://anyapi.com" 
    Alamofire.request(.GET, url).validate().responseJSON { response in 
     switch response.result { 
     case .Success(let data): 
      let json = JSON(data) 
      if let data = json["task_name"].arrayValue as [JSON]?{ 
       self.datas = data 
       self.displayTask.reloadData() 
       print("result of GET is \(self.datas)") 
      } 
     case .Failure(let error): 
      print("Request failed with error: \(error)") 
     } 
    } 

} 

Der gesamte Tableview Code gesehen hier https://codeshare.io/aKknb werden kann, ist

Antwort

1

Scheint wie json ["task_name"] ist kein Array und ist nicht auf der ersten Ebene, sondern ist eine Eigenschaft der Objekte in der Aufgaben-Array, deshalb erhalten Sie ein leeres Array.

Sie sollten etwas tun, wenn Sie Absicht, die taks im Tableview

if let data = json["tasks"].arrayValue as [JSON]?{ 
0

Da der Code, der Ihre HTTP-Anfrage macht, in der falschen Methode ist. Sie soll es in viewDidLoad() sein, aber man es eigentlich in didReceiveMemoryWarning put()

+0

Hi @Brett Ich habe meinen Code in viewDidLoad() verschoben, aber es füllt immer noch nicht – noobdev

+0

Was wird von Ihren Druckanweisungen in Ihr Protokoll gedruckt? –

+0

Denken Sie daran, dass die Ansichten in viewDidLoad noch nicht sichtbar sind. Natürlich können sie * zu dem Zeitpunkt vorhanden sein, zu dem Ihre asynchrone Serveranfrage zurückkommt, aber möglicherweise nicht. Es könnte also ein Timing-Problem sein. Sie können den Code in viewDidAppear verschieben, um dies zu überprüfen. –

0

Statt in viewDidLoad die Bevölkerung setzen versuchen, es in viewDidAppear ... auf diese Weise die Tableview alle Setup ist und in der Lage, richtig zu füllen.

0

Sie in ViewWillAppear Startanforderung HTTP kann zu zeigen und die tableview.That Weise Tableview nachladen richtig geladen wird.

Verwandte Themen