У меня есть 2 контроллера A и контроллер B. Контроллер A имеет TableView, а контроллер B - это подвид, который при нажатии открывает форму и при отправке вводит данные в базу данных. Моя проблема заключается в том, что я пытаюсь перезагрузить свой TableView из контроллера B, когда пользователь нажимает кнопку отправки, и я получаю следующую ошибку фатальная ошибка: неожиданно найдено nil при развертывании необязательного значения из этой строки.
self.TableSource.reloadData()
Теперь данные из контроллера B успешно вставлены, поэтому после перезапуска приложения данные, которые я отправляю, есть. Это мой код (TableSource - выход TableView)
Контроллер А
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-запрос, который получает данные из базы данных, теперь в том же контроллере A у меня есть кнопка, которая при нажатии открывает SubView для контроллера B, и это код
@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)
}
Это код в контроллере B, и вот как я пытаюсь перезагрузить TableView в контроллере A.
@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!)
}
Итак, как было сказано ранее, контроллер A загружает данные из базы данных, контроллер B имеет форму и при отправке вводит новые данные в базу данных. Весь этот процесс работает. Я только сейчас хочу обновить TableView в контроллере A из формы, представленной в контроллере B.
nsnotifications
- person Chanaka Anuradh Caldera   schedule 31.12.2016