gpt4 book ai didi

IOS Swift 如何从不同的 Controller 重新加载 tableView

转载 作者:行者123 更新时间:2023-11-28 10:16:04 24 4
gpt4 key购买 nike

我有 2 个 Controller A 和 Controller B。 Controller A 有一个 TableView, Controller B 是一个 subview ,当单击它时会打开一个表单,并在提交时将数据输入数据库。我的问题是我尝试从用户点击提交时从 Controller B 重新加载我的 TableView,我收到以下错误 fatal error :从该行展开可选值时意外发现 nil

 self.TableSource.reloadData()

现在来自 Controller B 的数据已成功插入,所以在我重新启动我的应用程序后,我提交的数据就在那里了。这是我的代码(TableSource 是 TableView 导出)

Controller A

  func reloadTable(latmin: Float,latmax: Float,lonmin: Float, lonmax: Float) {
let url:URL = URL(string:ConnectionString+"MY-URL")!



let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
let parameter = "parameters"
request.httpBody = parameter.data(using: String.Encoding.utf8)
session.dataTask(with:request, completionHandler: {(data, response, error) in
if error != nil {

} else {
do {

let parsed = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]



if let S = parsedData["myData"] as? [AnyObject] {


for A in Data {
// gets Json Data

}

DispatchQueue.main.async {
// This is what I named my TableView
self.TableSource.reloadData()

}
}

} catch let error as NSError {
print(error)
}

}

}).resume()


}

这是我从数据库获取数据的 HTTP 请求,现在在同一个 Controller A 中,我有一个按钮,单击该按钮会打开 Controller B 的 subview ,这是代码

  @IBAction func Post_Action(_ sender: Any) {
let Popup = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ControllerB") as! Controller B

self.addChildViewController(Popup)
Popup.view.frame = self.view.frame
self.view.addSubview(Popup.view)
Popup.didMove(toParentViewController: self)
}

这是 Controller B 中的代码,这就是我尝试在 Controller A 中重新加载 TableView 的方式

@IBAction func Submit_Form(_ sender: Any) {

// Code that submits the form no issues here


latmin = 32.18
latmax = 32.50
lonmin = -81.12
lonmax = -81.90

let Homepage = ControllerA()
Homepage.reloadTable(latmin: latmin!,latmax: latmax!,lonmin: lonmin!,lonmax: lonmax!)

}

因此,正如 Controller A 从数据库加载数据之前所述, Controller B 有一个表单,当提交时它会将新数据输入数据库。整个过程有效 我现在想从 Controller B 中提交的表单更新 Controller A 中的 TableView

最佳答案

我建议使用协议(protocol):

protocol SomeActionDelegate {
func didSomeAction()
}

在 View Controller B 中

var delegate: SomeActionDelegate?

在 ViewController A 中 segue 时

viewControllerB.delegate = self

你应该加上这个

extension ViewControllerA: SomeActionDelegate {
func didSomeAction() {
self.tableView.reloadData()
}
}

在 ViewController B 中

 func didChangeSomething() {
self.delegate?.didSomeAction()
}

它的工作方式类似于 ViewController B didChangeSomething() 向 ViewController A 发送消息,它应该 didSomeAction()

关于IOS Swift 如何从不同的 Controller 重新加载 tableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41402341/

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