Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用TabViewController,在保存数据时,TableView不会更新_Ios_Swift_Tableview - Fatal编程技术网

Ios 使用TabViewController,在保存数据时,TableView不会更新

Ios 使用TabViewController,在保存数据时,TableView不会更新,ios,swift,tableview,Ios,Swift,Tableview,我的当前设置:TabViewController,连接到导航控制器中嵌入的两个TableViewController。我能够在应用程序加载和在不同选项卡之间切换时更新tableview,没有问题。 当我打开另一个tableviewcontroller进行编辑时,问题就出现了。当我从这个视图控制器点击save时,它会更新数据并保存所有内容。但是,无论我尝试什么,我的tableView都不会更新,除非我在不同的选项卡之间切换或关闭并重新打开应用程序 我尝试过使用委托触发更新,我尝试过使用NSNoti

我的当前设置:TabViewController,连接到导航控制器中嵌入的两个TableViewController。我能够在应用程序加载和在不同选项卡之间切换时更新tableview,没有问题。 当我打开另一个tableviewcontroller进行编辑时,问题就出现了。当我从这个视图控制器点击save时,它会更新数据并保存所有内容。但是,无论我尝试什么,我的tableView都不会更新,除非我在不同的选项卡之间切换或关闭并重新打开应用程序

我尝试过使用委托触发更新,我尝试过使用NSNotificationCenter,没有骰子

还有其他人有这个问题吗

以下是我的保存功能:

func saveDose(完成:(\ufinished:Bool)->()){
如果searchName==“”{
guard let managedContext=appDelegate?.persistentContainer.viewContext else{return}
让剂量=剂量(上下文:managedContext)
让doseNumberString=numberDosesText.text
设doseNumberInt=Int64(doseNumberString!)??0
dose.name=nameText.text
dose.script=scriptText.text
dose.dose=dosageText.text
//dose.doseInterval=doseInterval
dose.firstDose=datePicker.date
dose.numberDoses=doseNumberInt
dose.doseReminder=提醒开关.isOn
做{
请尝试managedContext.save()
打印(“保存的数据”)
完成(真)
}抓住{
打印(“保存数据失败:”,错误。localizedDescription)
完成(假)
}
}否则{
更新(名称:searchName,首次剂量:searchDate)
完成(真)
}
}
这里是我调用它并加载回另一个tableview的地方

@IBAction func savebtnppressed(uu发送方:uibarbuttoneim){
保存剂量{(完成)在
如果完成{
打印(“我们现在需要返回”)
navigationController?.popViewController(动画:true)
self.disclose(动画:true,完成:nil)
}否则{
打印(“重试”)
}
}
}
在这里,当视图出现时,我将重新加载tableview

覆盖函数视图将出现(u动画:Bool){
超级。视图将显示(动画)
打印(“视图已从其他视图加载回”)
self.fetchData()
self.tableView.reloadData()
打印(“将显示视图”)
}
这是我的fetchData和loadData函数

func fetchData(){
在中加载数据{(完成)
如果完成{
setEmptyView(数组:logArray.count)
}
}
}
func loadData(完成:(\ucomplete:Bool)->()){
guard let managedContext=appDelegate?.persistentContainer.viewContext else{return}
let request=NSFetchRequest(entityName:“日志”)
做{
logArray=尝试managedContext.fetch(请求)as![Log]
打印(“获取的数据没有问题”)
完成(真)
}抓住{
打印(“无法获取数据:”,错误。localizedDescription)
完成(假)
}
}
我再次尝试了委托,并在其他运行良好的应用程序中使用了此代码。这与选项卡栏控制器有关吗

数据显然保存得很好,我只是无法正确更新tableView


似乎在保存后没有调用viewwillappeard函数。我也尝试过使用委托强制更新tableview,但没有任何效果。

基本上您需要调用tableview.reloadData()。在你完成储蓄之后。
此外,您可以在tableView上使用
BeginUpdate
EndUpdate
,对特定行执行动画。有关这方面的详细信息,您可以参考

在自定义委托中重新加载tableview方法,您的问题将得到解决。

显示您的代码。您是否在修改tableview数据源后调用tableview.reloadData()?显示您的代码bro…是的,我确实调用tableview.reloadData()。我相信在我弹出导航控制器后,我原来的tableviewcontroller不会调用ViewController,它会出现在我调用更新的地方。即使我使用委托调用它,它也不会重新加载数据。这可能是我的TabBarController的问题吗?在iOS 13上,建议使用新的
UITableViewDiffableDataSource
,而不是用于动画的BeginUpdate()和EndUpdate()变通方法。