在tableview.reloaddata崩溃,出现意外错误,错误为nil

时间:2018-11-23 05:30:19

标签: ios swift uitableview

在单击创建按钮时,我导航到tableviewcontroller屏幕。但是,由于尚未调用用于填充表视图的数组,因此不会在表视图中填充任何内容。

现在,一旦到达tableview屏幕,几秒钟后,就会在其他地方(在另一个文件中)调用另一个方法,该方法又在此tableviewcontroller屏幕中调用一个函数。这就是tableviewcontroller屏幕的方法,称为...

  func stopIndicator(thegrpName: String) {
    stopIndicator()

    let realm = try! Realm()
    let chatGrp = realm.objects(ChatGroup.self)
    chatGroup = chatGrp

    tableview.reloadData() //CRASH HAPPENS HERE

  }

在这种方法中,一旦我到达tableview.reloadData(),它就会崩溃,并显示错误Unexpectedly found nil while unwrapping an optional value..

我提到了this链接,该链接似乎也有类似的问题...但是并没有太多帮助...

这次崩溃的原因可能是什么?

编辑1:像这样给出numberOfRows和cellForRowAt ..

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if let chatGrp = chatGroup {
      return chatGrp.count
    }
    return 0
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: ChatGroupTableViewCell = tableView.dequeueReusableCell(withIdentifier: "chatgroupIdentifier") as! ChatGroupTableViewCell

    let groupChatObj = chatGroup![indexPath.row]
    cell.chatLabel.text = groupChatObj.lastMessage?.text?.text
    return cell
  }

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试创建委托方法,但是在另一个文件中,您正在尝试调用委托方法stopIndicator,而是在单例上调用方法,这会给您带来错误。

因此,设置委托权限。首先创建协议

protocol YourProtocol {
    func stopIndicator(thegrpName: String)
}

然后在另一个文件中创建委托属性

var delegate: YourProtocol?

现在您何时需要调用委托方法stopIndicator调用

delegate?.stopIndicator(thegrpName: ...)

现在添加到您的ViewController协议

ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, YourProtocol

现在在某个地方将您的另一个文件类委托设置为ViewController(如果它的视图在viewDidLoad中将其设置,如果它是另一个ViewController在prepareForSegue中将其设置)

fileClass.delegate = self