json - 调用函数将 Json 从视图控制器解析到其他视图
问题描述
我会从其他视图控制器中的视图控制器调用一个函数。此函数将解析 json 并将数据放入结构中的全局数组中,问题是如果我将函数放入 ViewDidAppear 它将向 Web 服务发出大量请求,如果我将函数放入 ViewDidLoad它不会下载数据,这是我要调用的函数
@objc func pazienti(completionHandler: @escaping () -> Void) {
let endpoint = MyStruct.endpointpazienti()
ArrayGlobale.listapazienti.removeAll()
guard let url = URL(string: endpoint) else {
print("Error: cannot create URL")
let error = BackendError.urlError(reason: "Could not construct URL")
completionHandler()
//
return
}
let urlRequest = URLRequest(url: url)
let session = URLSession.shared
let task = session.dataTask(with: urlRequest) {
(data, response, error) in
guard data != nil else {
//self.updateUserInterface()
print("Error: did not receive data")
completionHandler()
return
}
guard error == nil else {
completionHandler()
return
}
// let decoder = JSONDecoder()
// do {
// let todos = try decoder.decode([MyStruct].self, from: responseData)
// completionHandler(todos, nil)
// } catch {
// print("error trying to convert data to JSON")
// print(error)
// completionHandler(nil, error)
// }
do
{
let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [[String:Any]] ?? []
print(json)
for x in json
{
print(x["nome"]!)
ArrayGlobale.listapazienti.append(ListaPazienti(nome: x["nome"] as! String, cognome: x["cognome"] as! String, id : x["id"] as! String, data : x["data"] as! String, sesso : x["sesso"] as! String))
//print(ArrayGlobale.listapazienti)
//sleep(4)
}
}catch
{
}
}
task.resume()
ArrayGlobale.action = completionHandler
}
调用此函数是 self.pazienti { } 但我尝试使用全局函数创建一个扩展类,这将发出一些阻塞服务器的请求。
解决方案
您没有向我们展示任何会导致问题的代码。如果你去,viewDidAppear
你可能需要引入一些状态,以便知道请求是否已经在进行中(dataTask
如果是,则不要安排另一个)。另一方面,你viewDidLoad
应该做你需要的,它应该只被调用一次。
然而,除非真的没有其他解决方案,否则将您的 completionHandler 存储在某种全局变量中很可能不仅是一个坏主意,而且是一个非常糟糕的主意。据我从您的设计中可以看出,它似乎位于“错误”对象内。但是,您提供很少的代码来真正判断这一点。请至少将您的回调代码添加到问题中,以便我修改答案。func pazienti
推荐阅读
- android - 自动生成 Android 风格的 google-services.json
- python - sqlalchemy 更新部分日期
- python - 如果我没有标签,我还应该使用 tf.estimator.Estimator 吗?
- sql - SQL更新后,我需要自动以html形式返回我的页面并更新数据
- python - Python——重写函数代码的更好方法?
- android - fit 无法获得每日步数
- c# - Xamarin.Forms 如何禁用列表视图上的悬停突出显示效果
- linux - 如何在 Heroku 上为我的应用安装 libstdc++6?
- javascript - NPM 安装给出错误致命:引用不是树
- hyperledger-fabric - 获取配置文件的 pb 格式时出错