2015-12-01 2 views
0

Я пытаюсь отобразить некоторые данные, которые беру из базы данных в TableView, но данные не отображаются в TableView. Полученные данные форматируются в JSON.Показать данные JSON в TableView с Swift

Это данные я получаю от базы данных и то, что я хочу, чтобы напечатать в TableView только Давид:

{"name":"David"} 

Это код, чтобы получить данные из базы де данных:

let session = NSURLSession.sharedSession() 
    let request = NSURLRequest(URL: NSURL(string: "http://localhost:8888/Patients.php")!) 
    let task = session.dataTaskWithRequest(request) {data, response, downloadError in 

     if let error = downloadError { 
      print("Could not complete the request \(error)") 
     } 
     else { 

      do { 
       self.json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) 
      } catch { 
       fatalError() 
      } 
      dispatch_async(dispatch_get_main_queue(), { 

       if let parseJSON = self.json{ 

        let name = parseJSON["name"] as! String 

        self.arrayData.append(name) 

        print("Data1:\(self.arrayData)") 
       } 

      }) 
     } 
    } 
    task.resume() 

ArrayData является array где я положил данные я получаю от базы данных, и он объявлен как это:

var arrayData: [String] = [] 

Код

print("Data1:\(self.arrayData)") 

шоу в консоли это Data1:["David"], так что я получаю данные правильно.

Тогда я реализую методы для печати в'TableView', метод numberOfSectionsInTableView, метод numberOfRowsInSection и метод cellForRowAtIndexPath но данные не выводятся на печать в TableView.

Я думаю, что проблема заключается в том, что нарисован TableView, прежде чем я поместил данные в array, чтобы он ничего не печатал, потому что массив пуст, и я не знаю, как его исправить.

Кто-нибудь знает, в чем моя проблема?

+2

Вы пытались вызвать 'tableView.reloadData()' после изменения содержимого массива? –

+1

Это решило мою проблему! Спасибо, Себастьян! – David

ответ

1

Да, вы правы.

session.dataTaskWithRequest

является асинхронной. Данные не возвращаются немедленно, у них есть задержка. Вы должны перезагрузить TableView после получено данных:

self.arrayData.append(name) 
self.tableview.reloadData() 

Обычно я буду использовать блок:

func getData(handleComplete:((arr:NSMutableArray)->())){ 
    let aray = NSMutableArray() 
    let session = NSURLSession.sharedSession() 
    let request = NSURLRequest(URL: NSURL(string: "http://localhost:8888/Patients.php")!) 
    let task = session.dataTaskWithRequest(request) {data, response, downloadError in 

     if let error = downloadError { 
      print("Could not complete the request \(error)") 
     } 
     else { 

      do { 
       self.json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) 
      } catch { 
       fatalError() 
      } 
      dispatch_async(dispatch_get_main_queue(), { 

       if let parseJSON = self.json{ 

        let name = parseJSON["name"] as! String 

        aray.append(name) 

        print("Data1:\(self.arrayData)") 
       } 
       handleComplete(aray) 

      }) 
     } 
    } 
    task.resume() 
    arrayData 
} 

и viewdidload я буду называть:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.getData { (arr) ->() in 
     self.tableview.reloadData() 
    } 
} 

это лучше

+0

Это сработало! Большое спасибо Нгуен! – David

Смежные вопросы