无法从父ViewController

时间:2018-05-07 11:33:18

标签: ios swift uitableview

我有一个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
}

3 个答案:

答案 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的元素 - 也许此doctornil

您可以首先将断点设置为属性声明,观察点或实现属性观察者(willSet)并添加断点,以检查是否有人搞乱了您的变量。

如果所有这些都无济于事,您可能希望发布更多代码,尤其是您编写self.doctors数组的所有代码行。

答案 2 :(得分:0)

我终于能解决它了。问题在于变量的声明。我使用Objective-C头文件进行声明。虽然声明我宣称它们是“弱”而不是“保留”,这导致了问题。