在 tableview.reloaddata 崩溃并出现错误 Unexpectedly found nil
Posted
技术标签:
【中文标题】在 tableview.reloaddata 崩溃并出现错误 Unexpectedly found nil【英文标题】:Crash at tableview.reloaddata with error Unexpectedly found nil 【发布时间】:2018-11-23 05:30:19 【问题描述】:单击创建按钮后,我导航到 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
【问题讨论】:
请出示您的numberOfRowsInSection
和cellForRowAt
方法。另请参阅 this 了解一般故障排除和针对此异常的建议
似乎tableview
是nil
,如果它添加到情节提要中,请检查插座是否连接。
检查@Satish..其连接正确..
设置异常断点查看哪一行崩溃了。
不要使用感叹号(“!”),而是使用可选的展开,如果您尝试展开的值为 nil,则打印一些内容。这样,您就可以准确地知道哪个值是 nil,而不必猜测。
【参考方案1】:
看起来您正在尝试创建委托方法,但在另一个文件中您尝试调用委托方法 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
【讨论】:
以上是关于在 tableview.reloaddata 崩溃并出现错误 Unexpectedly found nil的主要内容,如果未能解决你的问题,请参考以下文章
_tableView reloadData 使我的应用程序崩溃
tableview reloadData在解包可选值时崩溃意外发现的nil
使用 tableView.reloadData() 重新加载 TableView 的问题
Swift:tableView.reloadData() 太慢了
在后台和 tableView.reloadData() 中获取核心数据对象
为啥在 Core Data container.performBackgroundTask() 之后不触发 tableView.reloadData()