快速在表格视图中插入新行时应用程序崩溃?
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()
在表格视图中显示数据源数组。由于控制器刚刚创建,因此只有一行,除非您在控制器中的 viewDidLoad
和 viewWillAppear
之间的某个位置填充数据源数组。
看不懂。你能举个例子解释一下吗?
这是一个例子。 instantiateViewController
使用空数据源数组 arrobj
创建一个新的空白控制器 - 除非该数组填充在控制器内部。在呈现控制器之前,您插入一个对象,因此有 一个 对象,也就是一行。以上是关于快速在表格视图中插入新行时应用程序崩溃?的主要内容,如果未能解决你的问题,请参考以下文章