我为我的应用设置了一个设置面板,其滑块可以设置为“在下次启动时删除首选项”(在主iPhone设置应用内)。在我的应用程序委托中,我这样做,以便applicationWillEnterForeground检查是否在首选项中设置了设置开关并清除我的设置:
如有必要,[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
。
我的问题是:如果我的视图控制器中的viewDidLoad和viewDidAppear因为iOS 4的快速应用程序切换而导致设置更改后没有运行(当我从设置应用程序返回时视图仍然加载),怎么能我提醒这些视图控制器重置设置,以便重新加载所有数据?如果只有一种方法从委托调用[MainViewController initData],但遗憾的是无法完成。看起来除非在视图控制器中发生了一个动作,否则它无法知道检查设置是否已被重置。
非常感谢任何帮助。
答案 0 :(得分:1)
通知通常是跨控制器等进行通信的最佳方式。
首先,将初始化代码分离到视图控制器中由viewDidLoad
/ viewWillAppear
调用的方法。为了便于参考,我们将其称为 resetUser 。
接下来,创建一个通知,当它看到此开关被抛出时,会从applicationWillEnterForeground
触发。我们称之为 userRequestsReset 。
[[NSNotificationCenter defaultCenter] postNotificationName:@"userRequestsReset"
object:nil];
最后,在viewController中侦听userRequestsReset通知,并在收到通知时调用resetUser方法。
在viewController的viewDidLoad中:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(resetNoticeReceived:)
name:@"userRequestsReset"
object:nil];
viewController中响应通知的方法:
- (void) resetNoticeReceived:(NSNotification *)notif {
[self resetUser];
}
在viewDidUnload中删除viewController作为观察者:
[[NSNotificationCenter defaultCenter] removeObserver:self];