我正在尝试将从数据库中获取的一些数据显示为TableView
,但数据未显示在TableView
中。我收到的数据格式为JSON。
这是我从数据库收到的数据以及我想在TableView
中打印的内容只是David:
{"name":"David"}
这是从de data base获取数据的代码:
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
方法中打印的方法,但数据没有打印在{{1 }}
我认为问题是在我将数据放入TableView
之前绘制了TableView
因此它没有打印因为数组是空的,我不知道如何修复它。
任何人都知道我的问题是什么?
答案 0 :(得分:1)
session.dataTaskWithRequest
是异步的。数据不会立即返回,它有延迟。 您必须在收到数据后重新加载tableview:
self.arrayData.append(name)
self.tableview.reloadData()
通常我会使用block:
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()
}
}
更好