我有一个UITableView和一个自定义的TableViewCell类,我在viewDidLoad方法中设置了一个非null值,但是在cellForRow方法中将值设置为UITableViewCell时,该值神奇地变为nil。我无法从自定义UITableViewCell访问set变量 这是代码片段。 ViewDidLoad中的Print语句打印该值,而cellForRowAtIndexPath中的一个返回nil
override func viewDidLoad() {
super.viewDidLoad()
Docco360Util.shared().getDoctorsWithResultBlock { (doctorObjects, error) in
if let err = error{
print(err)
}else{
self.doctors=doctorObjects
print(doctorObjects![1].professionalHeader)//output is printed here
self.doctorTableView.reloadData()
}
}
// Do any additional setup after loading the view.
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let identifierForUsers = "DoctorTableViewCell"
var cell = tableView.dequeueReusableCell(withIdentifier: identifierForUsers, for: indexPath) as! DoctorTableViewCell
if cell == nil{
cell=DoctorTableViewCell(style: .default, reuseIdentifier: identifierForUsers)
}
print(self.doctors[indexPath.row].professionalHeader)//output in nil here
cell.doctor=self.doctors[indexPath.row]
return cell
}
答案 0 :(得分:0)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "DoctorTableViewCell", for: indexPath) as! DoctorTableViewCell
print(self.doctors[indexPath.row].professionalHeader)
cell.doctor = self.doctors[indexPath.row]
return cell
}
答案 1 :(得分:0)
首先,您应该确保在主(UI)线程中执行Docco360Util.shared().getDoctorsWithResultBlock
的闭包。如果没有,您应该将其放入DispatchQueue.main.async
块。
然后,您应该验证结果块是否已执行(例如,print语句会打印一些内容)。顺便问一下,为什么要用print(doctorObjects![1].professionalHeader)
而不是1
来呼叫0
?在tableView(tableView:cellForRowAt:)
您的索引为0
的元素 - 也许此doctor
为nil
?
您可以首先将断点设置为属性声明,观察点或实现属性观察者(willSet
)并添加断点,以检查是否有人搞乱了您的变量。
如果所有这些都无济于事,您可能希望发布更多代码,尤其是您编写self.doctors
数组的所有代码行。
答案 2 :(得分:0)
我终于能解决它了。问题在于变量的声明。我使用Objective-C头文件进行声明。虽然声明我宣称它们是“弱”而不是“保留”,这导致了问题。