应用程序从多任务恢复后刷新视图
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]
。
或者,您可以分别在viewDidLoad
或viewWillAppear
中注册通知并在viewDidUnload
或viewWillDisapper
中取消注册。
【讨论】:
【参考方案2】:您是否尝试在 UIApplicationDelegate 中的 applicationWillResumeActive
或 applicationWillEnterForeground
中添加一些刷新代码?
【讨论】:
缺少调用viewWillAppear/viewDidAppear 还有什么其他刷新代码?当 applicationWillEnterBackground 和 applicationWillResignActive 我调用了 setNeedsDisplay,但这似乎也没有。 假设它工作正常,在应用程序内部更新它时执行与通常相同的操作。没有代码就不容易知道发生了什么。 我发现了问题,这是我所期望的最后一件事。当我的应用重新加载并从 [NSUserDefaults standardUserDefaults] 中获取值时,[NSUserDefaults standardUserDefaults] 中的值尚未更新。一旦我切换选项卡,然后返回设置选项卡,存储在 NSUSerDefaults 中的值现在反映了更改。有没有办法强制 [NSUserDefaults standardUserDefaults] 立即反映更改? [[NSUserDefaults standardUserDefaults] 同步]; 问题不是我的问题,显示正常刷新。问题是 [NSUserDefaults standardUserDefaults] 没有被更新。要解决这个问题,只需在 viewWillLoad 方法中调用 [[NSUserDefaults standardUserDefaults] syncronize]。以上是关于应用程序从多任务恢复后刷新视图的主要内容,如果未能解决你的问题,请参考以下文章
当应用程序从多任务托盘停止时,Android 应用程序未收到 Firebase 通知