2015-12-01 45 views
0

我試圖將一些數據從數據庫中顯示到TableView,但數據未顯示在TableView中。我收到的數據以JSON格式化。用Swift在TableView中顯示JSON數據

這是我收到的數據形成數據的基礎,我想在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] = [] 

在控制檯此Data1:["David"]代碼

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

演出,所以我得到正確的數據。

然後我實現方法在'TableView'打印時,numberOfSectionsInTableView的方法,該方法numberOfRowsInSectioncellForRowAtIndexPath方法,但數據未在TableView打印。

我認爲問題在於我在將數據放入array之前繪製了TableView,所以它沒有打印任何內容,因爲數組是空的,我不知道如何解決它。

任何人都知道我的問題是什麼?

+2

您是否在更改數組內容後嘗試調用'tableView.reloadData()'? –

+1

這解決了我的問題!謝謝塞巴斯蒂安! – David

回答

1

是的,你是對的。

session.dataTaskWithRequest

是異步。數據不會立即返回,它有延遲。 您必須收到數據後重裝實現代碼如下:

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

工作!非常感謝Nguyen! – David