在 TableView Swift 3 上设置值
Posted
技术标签:
【中文标题】在 TableView Swift 3 上设置值【英文标题】:Set values on TableView Swift 3 on function 【发布时间】:2016-11-02 15:57:52 【问题描述】:实际上,我需要在我的 TableView 上设置数据,我得到的字符串位于对 WebService 发出 POST 请求的函数上。
override func viewDidLoad()
names.append("Data 1")
names.append("Data 2")
names.append("Data 3")
self.request()
MyTable.delegate = self
MyTable.dataSource = self
super.viewDidLoad()
在self.request()
功能上,我有一个可以正常工作的发布请求:
func request()
let parameters: Parameters = [
"action": "*",
"key":"*": "*"
]
Alamofire.request("my_url", method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON response in
switch response.result
case .success(let JSON):
print("Validation Successful")
print(response.result.value)
let response = JSON as! NSDictionary
let userId = response.object(forKey: "Data")!
let data = userId as! NSArray
for item in data // loop through data items
let obj = item as! NSDictionary
print("Obj: \"\(obj["KeyName"] as! String)\"")
self.names.append(obj["KeyName"] as! String)
print(userId)
case .failure(let error):
print(error)
第一部分工作正常:
names.append("imac")
names.append("Macbook")
names.append("iphon")
print("Obj: \"\(obj["KeyName"] as! String)\"")
在控制台上向我显示字符串,但是当我在 TableView 上设置它时,self.names.append(obj["KeyName"] as! String)
只显示第一部分的数据,我做错了吗?
【问题讨论】:
我猜这是因为它是异步的。因此,一旦获得新名称,您就需要执行MyTable.reloadData()
。还要避免命名以大写开头的变量(如MyTable
=> myTable
)。
谢谢这是问题,问候。
【参考方案1】:
每当您将数据更新到数据源时,您都必须重新加载 tableView 以显示新内容。在 for 循环之后添加表重新加载,它应该更新 tableView。由于您的 Alamofire 调用是在不同的线程(主线程除外)中异步执行的,因此请在主线程中更新 tableView。
DispatchQueue.main.async(execute:
MyTable.reloadData()
)
在你的例子中:
func request()
let parameters: Parameters = [
"action": "*",
"key":"*": "*"
]
Alamofire.request("my_url", method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON response in
switch response.result
case .success(let JSON):
print("Validation Successful")
print(response.result.value)
let response = JSON as! NSDictionary
let userId = response.object(forKey: "Data")!
let data = userId as! NSArray
for item in data // loop through data items
let obj = item as! NSDictionary
print("Obj: \"\(obj["KeyName"] as! String)\"")
self.names.append(obj["KeyName"] as! String)
DispatchQueue.main.async(execute:
MyTable.reloadData()
)
print(userId)
case .failure(let error):
print(error)
【讨论】:
很高兴它有帮助。如果某个答案有助于解决您的问题,您可以将其标记为答案/点赞。以上是关于在 TableView Swift 3 上设置值的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4 tableview 不使用通用完成处理程序显示数据