如何在 viewWillAppear 上重新加载 fetchedResultsController?

     2023-03-05     86

关键词:

【中文标题】如何在 viewWillAppear 上重新加载 fetchedResultsController?【英文标题】:How to reload fetchedResultsController on viewWillAppear? 【发布时间】:2017-11-16 05:20:07 【问题描述】:

因为我想在关闭弹出视图控制器后重新加载表视图和数据。

这个获取控制器似乎只在视图加载时运行,因为它保留了旧数据。视图出现时如何运行或刷新获取控制器?

var fetchedResultsController: NSFetchedResultsController<Record> 
    if _fetchedResultsController != nil 
        return _fetchedResultsController!
    

    let fetchRequest: NSFetchRequest<Record> = Record.fetchRequest()
    fetchRequest.fetchBatchSize = 20
    let accBtn = UserDefaults().value(forKey: "BtnName") as! String
    let sortDescriptor = NSSortDescriptor(key: "createdAt", ascending: false)
    fetchRequest.sortDescriptors = [sortDescriptor]
    fetchRequest.predicate = NSPredicate(format: "%K == %@", "accountbook" , "\(accBtn)")
    let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "createdAt", cacheName: nil)
    aFetchedResultsController.delegate = self
    _fetchedResultsController = aFetchedResultsController

    do 
        try _fetchedResultsController!.performFetch()
     catch 
        let nserror = error as NSError
        fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
    

    return _fetchedResultsController!


var _fetchedResultsController: NSFetchedResultsController<Record>? = nil

func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) 
    self.tableView.beginUpdates()


func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange sectionInfo: NSFetchedResultsSectionInfo, atSectionIndex sectionIndex: Int, for type: NSFetchedResultsChangeType) 
    switch type 
    case .insert:
        self.tableView.insertSections(IndexSet(integer: sectionIndex), with: .fade)
    case .delete:
        self.tableView.deleteSections(IndexSet(integer: sectionIndex), with: .fade)
    default:
        return
    


func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) 
    switch type 
    case .insert:
        tableView.insertRows(at: [newIndexPath!], with: .fade)
    case .delete:
        tableView.deleteRows(at: [indexPath!], with: .fade)
    case .update:
        self.configureCell(tableView.cellForRow(at: indexPath!)! as! DashboardCell, withRecordItem: anObject as! Record)
    case .move:
        tableView.moveRow(at: indexPath!, to: newIndexPath!)
    


func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) 
    self.tableView.endUpdates()

【问题讨论】:

我也遇到了同样的问题...有什么解决办法吗? 【参考方案1】:

如果您在托管对象上下文中更改数据时您的 ViewController 在内存中,则获取的结果控制器委托应该可以工作。

在您当前的实现中,每次更改时您都会更新 tableview,但并不总是建议这样做。我猜你需要跑题,只在上面实现didChangeContentreloadData

func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) 
    self.tableView.reloadData()

【讨论】:

我试过这个。关闭 pop vc 后,表格刷新但列表有问题(某些数据未显示),当我选择单元格时,出现此错误 'cannot access fetched objects before -performFetch:' @WanJern:你删除了所有其他的委托方法吗? 你的意思是我必须删除 - controllerWillChangeContent, didChange section &amp; anObject 吗?但我需要它来更新我的用户界面并将相同的日期项分组到一个部分中。@Puneet Sharma 是的,我是这个意思。在 didChangeContent 上调用 tableView 上的 reloadData,将完成所有需要的更改。 好的,我尝试删除它,但在我关闭弹出 vc 后它仍然显示旧数据...

试图在 viewWillAppear 中重新加载数据()

】试图在viewWillAppear中重新加载数据()【英文标题】:TryingtoreloadData()inviewWillAppear【发布时间】:2019-04-1720:31:41【问题描述】:我有一个tabBarController,在其中一个选项卡中我可以选择要在我的收藏夹选项卡中的任何文档。所以... 查看详情

在函数 ViewWillAppear 中刷新或重新加载数据并不总是在 UITableViewcontroller 中工作

】在函数ViewWillAppear中刷新或重新加载数据并不总是在UITableViewcontroller中工作【英文标题】:RefreshorreloaddatainfunctionViewWillAppearnotalwaysworkinginUITableViewcontroller【发布时间】:2019-11-0916:10:07【问题描述】:我将一个UITabbarViewController... 查看详情

在 UIViewController 上加载数据:viewDidLoad 和 viewWillAppear - 啥是正确的逻辑?

】在UIViewController上加载数据:viewDidLoad和viewWillAppear-啥是正确的逻辑?【英文标题】:LoadingdataonaUIViewController:viewDidLoadandviewWillAppear-Whatistheproperlogic?在UIViewController上加载数据:viewDidLoad和viewWillAppear-什么是正确的逻辑?【发布时... 查看详情

如何刷新视图控制器

...时间】:2017-06-1910:03:37【问题描述】:我有一个A类,当viewwillAppear完成时,我会在几秒钟后从服务器获取一些数据,根据这些数据我更改了视图上的一些按钮,有什么方法可以在目标-c中完全刷新视图?【问题讨论】:【参考方... 查看详情

Swift:如何使用导航控制器重新加载表格

...如何才能再次完全重新加载表格。我尝试在viewDidAppear和viewWillAppear中添加tableView.reloadData(),它没有 查看详情

画外音:每次加载视图时,ViewWillAppear 中的 UIAccessibilityLayoutChangedNotification 都没有将焦点设置在导航栏标题上

】画外音:每次加载视图时,ViewWillAppear中的UIAccessibilityLayoutChangedNotification都没有将焦点设置在导航栏标题上【英文标题】:Voiceover:UIAccessibilityLayoutChangedNotificationinViewWillAppearisnotsettingfocusonNavigationbartitleeverytimetheviewisloaded【发 查看详情

java示例代码_在简历上重新加载共享参考?(或如何刷新/重新加载活动)

java示例代码_在简历上重新加载共享参考?(或如何刷新/重新加载活动) 查看详情

如何快速从另一个视图控制器重新加载表格视图

...模态视图控制器时,我在iPad上使用表单呈现样式,因此viewWillAppear和viewDidAppear方法将不起作用【问题讨论】:你可以使用NSNotificationCenter 查看详情

如何在不重新加载 visibleCell 的情况下在 collectionView 上重新加载数据

】如何在不重新加载visibleCell的情况下在collectionView上重新加载数据【英文标题】:HowcanIreloadDataoncollectionViewwithoutreloadingvisibleCell【发布时间】:2017-02-0900:41:39【问题描述】:?我每页有一个单元格(屏幕大小),每个单元格都... 查看详情

我如何在 Kivy + Python 上重新加载图像

】我如何在Kivy+Python上重新加载图像【英文标题】:HowIcanreloadanimageonKivy+Python【发布时间】:2019-04-2216:59:58【问题描述】:我正在使用kivy+phyton为IOS和Androdi开发数字目录,但我不知道如何为这种情况重新加载图像。在main.py上classP... 查看详情

如何在不重新启动的情况下在 Express 上重新加载一个文件?

】如何在不重新启动的情况下在Express上重新加载一个文件?【英文标题】:HowtoreloadonefileonExpresswithoutrestarting?【发布时间】:2015-11-0223:17:35【问题描述】:我正在使用fs.appendFileSync(...)将新路由附加到路由JavaScript文件,但是由于... 查看详情

如何在后退按钮上重新加载上一个视图控制器?

】如何在后退按钮上重新加载上一个视图控制器?【英文标题】:Howtoreloadthepreviousviewcontrolleronbackbutton?【发布时间】:2015-07-3014:01:24【问题描述】:我有两个视图控制器A和B。在ViewControllerA我正在显示来自服务器的数据。我有导... 查看详情

防止uitableView重新加载

...1.当我提出另一个模态视图时。2.行选择发生。我不会在viewWillAppear或viewDidAppear中调用[tableviewreloadData]。有没有办法防止这种重新加载?【问题 查看详情

如何在不重新加载的情况下在同一页面上提交文件[重复]

】如何在不重新加载的情况下在同一页面上提交文件[重复]【英文标题】:Howtosubmitthefileonthesamepagewithoutreloading[duplicate]【发布时间】:2016-12-2711:06:54【问题描述】:我试图找到问题“如何在不重新加载选项卡的情况下提交文件”... 查看详情

在 tableView 中重新加载数据的问题

...ler和menuViewController目前我可以使用[self.tableViewreloadData];在viewWillAppear方 查看详情

Django:如何在不重新加载的情况下在页面上显示更新的信息

】Django:如何在不重新加载的情况下在页面上显示更新的信息【英文标题】:Django:Howtoshowtheupdatedinformationonthepagewithoutreloading【发布时间】:2021-09-1311:04:48【问题描述】:我在Djnago工作,我想在不重新加载页面的情况下更新信息... 查看详情

确定 viewWillAppear 来自打开应用程序,还是取消选择模式

】确定viewWillAppear来自打开应用程序,还是取消选择模式【英文标题】:DetermineisviewWillAppearcomesfromopeningapp,ordeselectingmodal【发布时间】:2014-09-2300:26:20【问题描述】:我目前正在初始屏幕上加载应用加载数据。这发生在我的观点W... 查看详情

如果页面重新加载,如何在表单上保留对单选按钮的选择

】如果页面重新加载,如何在表单上保留对单选按钮的选择【英文标题】:HowcanIkeeptheselectionofaradiobuttononaformifapagereloads【发布时间】:2019-10-2603:17:05【问题描述】:早安,我创建的表单的一部分由两组单选按钮组成,它们根据... 查看详情