gpt4 book ai didi

ios - 使用 Swift 在 TableView 中显示 JSON 数据

转载 作者:行者123 更新时间:2023-11-29 01:25:58 24 4
gpt4 key购买 nike

我正在尝试将从数据库中获取的一些数据显示到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com