应用程序从多任务恢复后刷新视图

Posted

技术标签:

【中文标题】应用程序从多任务恢复后刷新视图【英文标题】:Refresh view after app resumes from multitasking 【发布时间】:2012-03-24 01:57:05 【问题描述】:

我有一个包含三个选项卡的 tabBarController。一个选项卡是设置选项卡,它具有三个 UISwtch,它们包含在 UITableView 中,并将数据存储在 [NSUserDefaults standardUserDefaults] 中。我正在测试用户可能做的所有事情,并发现了一个小问题。当设置选项卡在前台并且我退出应用程序时,输入手机的主要设置,更改我的应用程序的设置,退出设置然后重新启动我的应用程序,设置选项卡仍在前台,但拨动开关没有反映在上一步中所做的更改。如果我切换到另一个选项卡,然后回到我的设置选项卡,现在会反映更改。

我已经尝试了所有方法,viewWillAppear、viewDidAppear、[theTtableView reloadData],没有任何效果。奇怪的是,当它恢复并且设置选项卡在前台时调用完全相同的函数,就像当另一个选项卡在前台时,我选择设置选项卡。我只是无法刷新它,即使 viewDidAppear 和 viewWillAppear 都在设置控制器上被调用。

我知道用户可能不太可能在应用内设置选项卡中,然后退出并转到手机设置选项卡进行更改,然后返回应用程序,但这让我抓狂,我需要解决这个问题.

我已经尝试了所有可以在这里找到的建议,但仍然无法成功。

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

调用这个

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshViews) name:UIApplicationWillEnterForegroundNotification object:nil];

在您的视图控制器的初始化中(将refreshViews 替换为您刷新开关以反映实际值的方法的选择器)。 不要忘记在dealloc[[NSNotificationCenter defaultCenter] removeObserver:self]

或者,您可以分别在viewDidLoadviewWillAppear 中注册通知并在viewDidUnloadviewWillDisapper 中取消注册。

【讨论】:

【参考方案2】:

您是否尝试在 UIApplicationDelegate 中的 applicationWillResumeActiveapplicationWillEnterForeground 中添加一些刷新代码?

【讨论】:

缺少调用viewWillAppear/viewDidAppear 还有什么其他刷新代码?当 applicationWillEnterBackground 和 applicationWillResignActive 我调用了 setNeedsDisplay,但这似乎也没有。 假设它工作正常,在应用程序内部更新它时执行与通常相同的操作。没有代码就不容易知道发生了什么。 我发现了问题,这是我所期望的最后一件事。当我的应用重新加载并从 [NSUserDefaults standardUserDefaults] 中获取值时,[NSUserDefaults standardUserDefaults] 中的值尚未更新。一旦我切换选项卡,然后返回设置选项卡,存储在 NSUSerDefaults 中的值现在反映了更改。有没有办法强制 [NSUserDefaults standardUserDefaults] 立即反映更改? [[NSUserDefaults standardUserDefaults] 同步]; 问题不是我的问题,显示正常刷新。问题是 [NSUserDefaults standardUserDefaults] 没有被更新。要解决这个问题,只需在 viewWillLoad 方法中调用 [[NSUserDefaults standardUserDefaults] syncronize]。

以上是关于应用程序从多任务恢复后刷新视图的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序从多任务托盘停止时,Android 应用程序未收到 Firebase 通知

应用程序在 Xcode 上连接设备时显示警报视图,否则不会

使用 MATLAB 从多视图中获取运动结构

javax.faces.application.ViewExpiredException:无法恢复视图

从“详细视图”返回后如何刷新表格视图?

从多页应用程序进行身份验证后,如何在初始下载期间将 JWT 令牌加载到 React?