我正在尝试将从数据库中获取的一些数据显示到 TableView
中,但数据未显示在 TableView
中。我收到的数据采用 JSON 格式。
这是我从数据库接收到的数据,我想在 TableView
中打印的只是 David:
{"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 是一个数组
,我把从数据库接收到的数据放在其中,声明如下:
var arrayData: [String] = []
代码
print("Data1:\(self.arrayData)")
在控制台中显示此 Data1:["David"]
,以便我正确获取数据。
然后我在“TableView”、numberOfSectionsInTableView
方法、numberOfRowsInSection
方法和 cellForRowAtIndexPath
方法中实现打印方法,但是数据未打印在 TableView
中。
我认为问题是 TableView
是在我将数据放入 array
之前绘制的,所以它什么都不打印,因为数组是空的,而我没有知道如何修复它。
谁知道我的问题是什么?
最佳答案
是的,你是对的。
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()
}
}
更好
关于ios - 使用 Swift 在 TableView 中显示 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34017897/