在单击创建按钮时,我导航到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
}
答案 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