快速在表格视图中插入新行时应用程序崩溃?

Posted

技术标签:

【中文标题】快速在表格视图中插入新行时应用程序崩溃?【英文标题】:App crashes when inserting new row in tableview in swift? 【发布时间】:2021-01-19 05:29:48 【问题描述】:

我一直在尝试在 tableview 中插入新行,但每当我尝试这样做时,它都会使应用程序崩溃。 我有两个视图控制器。第一个控制器有表格视图,第二个控制器有一些文本字段。我们从数组中的文本字段中添加一些值,然后在之前的 tablview 中显示这些值。第一次在 tableview 上打印值,但第二次崩溃(它应该添加一个新行并在该行上显示值)。

在第一个控制器中:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return arrObj.count
    
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "view") as! ViewCell
       
            cell.label.text = arrObj[indexPath.row].category!

在第二个控制器中:

let vc = self.storyboard?.instantiateViewController(identifier: "viewcontroller") as! viewcontroller
                   
             vc.arrobj.insert(KeyValues(date: textfeild.text!, category: textfeild.text!, amount: textfeild.text!, tax: textfeild!.text!), at: 0)
             vc.tableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)// Error:  Unexpectedly found nil while implicitly unwrapping an Optional value
           self.navigationController?.pushViewController(vc, animated: true)

谁能告诉我哪里出错了?

【问题讨论】:

我没有创建导致崩溃的数组结构全局。 【参考方案1】:

问题是在控制器被实例化后,表视图没有(还)连接。

删除行以插入行

let vc = self.storyboard?.instantiateViewController(identifier: "viewcontroller") as! viewcontroller           
vc.arrobj.insert(KeyValues(date: textfeild.text!, category: textfeild.text!, amount: textfeild.text!, tax: textfeild!.text!), at: 0)    
self.navigationController?.pushViewController(vc, animated: true)

并在viewWillAppear 中的目标控制器中重新加载表格视图

func viewWillAppear(_ animated : Bool) 
    super.viewWillAppear(animated)
    tableView.reloadData()

插入动画行没有任何好处,因为您不会看到它

【讨论】:

您的代码工作正常,但它不会插入新行,而是在 tableview 的同一行显示值。 reloadData() 在表格视图中显示数据源数组。由于控制器刚刚创建,因此只有一行,除非您在控制器中的 viewDidLoadviewWillAppear 之间的某个位置填充数据源数组。 看不懂。你能举个例子解释一下吗? 这是一个例子。 instantiateViewController 使用空数据源数组 arrobj 创建一个新的空白控制器 - 除非该数组填充在控制器内部。在呈现控制器之前,您插入一个对象,因此有 一个 对象,也就是一行。

以上是关于快速在表格视图中插入新行时应用程序崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

在 UISegment 之间快速切换时应用程序崩溃

滚动表格视图时应用程序崩溃

删除表格视图中的部分时应用程序崩溃

滚动表格视图时,iOS 应用程序随机崩溃,不确定如何处理引发的错误

当单元格滚动回视图时表格崩溃

未知异常和崩溃