[英]Swift: Calling ViewDidLoad recursively due to URLSession.DataTask
我在用图像列表填充场景时遇到麻烦。 我正在使用UIViewController而不是tableView来显示我的界面。 想象一下Tinder之类的应用程序。 没有tableview。 要滚动浏览图像,每张图像都将滑动到下一张。
我填充场景中图像的方式是通过使用URLSession.DataTask在ViewDidLoad中发出POST请求。 但是我似乎无法解决多线程问题。
原始代码:
ViewDidLoad(){
queryService.getProduct { productlist, errorMessage in
if !errorMessage.isEmpty { print("Search error: " + errorMessage) }
self.products = productlist
}
// CODE TO initialize View
// MORE CODE
}
queryService包含URLSession.DataTask,后者调用URL并执行序列化。 该方法已正确实施。 我面临的问题是“代码初始化视图”部分之后实例化了self.products。 它们似乎都在并行运行。 因此,这是我为修复此问题所做的工作:
快速解决:
var count = 0
ViewDidLoad(){
if count == 0 {
queryService.getProduct { productlist, errorMessage in
if !errorMessage.isEmpty { print("Search error: " + errorMessage) }
self.products = productlist
self.count = 1
self.ViewDidLoad()
}
} else {
// CODE TO initialize View
// MORE CODE
}
}
这可行,但是我知道我的快速解决方案不是最佳实践。 关于最佳解决方案有什么建议吗? 谢谢。 还有一个后续问题:像这样手动调用viewdidload可以吗?
您可以执行此功能,但不能在`viewDidLoad中进行
override func viewDidLoad() {
super.viewDidLoad()
getProductUntilThereIsOneProductAtLeast()
}
func getProductUntilThereIsOneProductAtLeast() {
if count == 0 {
queryService.getProduct { productlist, errorMessage in
if !errorMessage.isEmpty { print("Search error: " + errorMessage) }
self.products = productlist
self.count = 1
self.getProductUntilThereIsOneProductAtLeast()
}
} else {
// CODE TO initialize View
// MORE CODE
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.