如何解决如何从详细信息视图控制器中删除数据并弹出回到先前的表视图控制器
我有3个视图控制器:1)主表视图控制器,2)辅助表视图控制器,3)和详细视图控制器。主表视图控制器使用NSFetchedResultsController
从Core Data获取数据,并将数据滴入层次结构。
问题是,当我从详细信息视图控制器中删除一个数据项并弹出回到前一个视图控制器(即辅助表视图控制器)时,出现以下错误:
线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0
已删除的项目仍然存在于辅助表视图中。
主表视图控制器将数据传递到辅助表视图控制器,如下所示:
override func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "Secondary") as? SecondaryTableViewController {
vc.secondaryProperty = fetchedResultsController?.object(at: indexPath)
navigationController?.pushViewController(vc,animated: true)
}
}
然后将其传递给详细视图控制器,如下所示:
override func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
if let vc = storyboard?.instantiateViewController(identifier: "Detail") as? DetailViewController {
vc.finalProperty = secondaryProperty[indexPath.row]
navigationController?.pushViewController(vc,animated: true)
}
}
对于删除过程,我尝试了许多不同的配置:
self.context.delete(deletedItem)
self.saveContext()
_ = self.navigationController?.popViewController(animated: true)
我尝试使用委托从辅助表视图控制器中删除该项目,然后再将其弹出(在详细视图控制器中执行):
self.detailTableVCDelegate?.seconaryProperty.remove(at: indexPathRow)
或删除表格视图的行:
self.detailTableVCDelegate?.tableView.deleteRows(at: [self.indexPath],with: .fade)
我在tableView.reloadData()
和viewWillAppear
中尝试过viewDidAppear
,但是没有一个。
解决方法
如果您要从另一个VC中的一个VC编辑某些内容,请确保在定义变量的地方输入了“ static”关键字。
Class FirstVC: VC {
//define a variable here with static in front of it
static var age = 5
}
Class SecondVC: VC {
FirstVC.age = 7
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。