我有一个 Swift (2.2) iOS 应用程序(我的第一个),其中包含几个 UITableViews
。其中一个 View 列出了在整个计划生命周期中添加/删除的付款。
这一切在 99% 的情况下都工作正常,但是有几次我遇到了 UITableView
突然变成 nil 的问题。
IBOutlet
必须正确连接,否则根本无法工作。
当我没有在任何地方分配给 IBOutlet
变量(只是调用其方法)时,可能是什么原因导致的?
或者(如果我找不到原因),在发生这种情况时提供最佳处理建议(如果我需要重新创建它,outlets
、events
、自动布局
等?)
@IBOutlet weak var paymentTableView: UITableView!
func handlePayment(payment: PaymentRecord) -> Void {
let existingPaymentIndex = payments.indexOf({ $0.payNo == payment.payNo })
if (existingPaymentIndex != nil) {
payments.removeAtIndex(existingPaymentIndex!)
}
if (self.paymentTableView == nil) { // Here is where I notice the issue
Log.error?.message("handlePayment: paymentTableView is nil!!")
return
}
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.paymentTableView.reloadData()
})
}
最佳答案
发生的情况是,当 View 被释放时, TableView 正在从内存中卸载。您可能有一个异步任务完成,通常是通过网络调用完成的,即在 View 被释放后返回并调用此函数。当 View 尝试加载网络资源并且用户能够在调用网络调用的完成处理程序之前切换到不同的 View 时,我已经多次看到这种情况发生。
关于ios - Swift iOS,UITableView 无,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36342603/