Сбой таблицы tableview.reloaddata с ошибкой Неожиданно найдено ноль - PullRequest
0 голосов
/ 23 ноября 2018

По нажатию кнопки создания я перехожу к экрану tableviewcontroller.Но в табличном представлении ничего не заполняется, так как массив, который заполняет табличное представление, еще не был вызван.

Теперь, когда экран табличного представления достигнут, через несколько секунд другой метод вызывается в другом месте (в другом файле),который в свою очередь вызывает функцию на этом экране 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..

Я упоминал эта ссылка, которая, похоже, имеет аналогичную проблему ... но не может получить от этого большую помощь ...

В чем может быть причина этого сбоя ...?

РЕДАКТИРОВАТЬ 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 голосов
/ 23 ноября 2018

Похоже, вы пытаетесь создать метод делегата, но в другом файле, где вы пытаетесь вызвать метод делегата 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...