通过快速应用切换重置iOS4中的应用设置的最佳方式

时间:2010-12-09 21:54:14

标签: cocoa-touch ios4 settings nsuserdefaults

我为我的应用设置了一个设置面板,其滑块可以设置为“在下次启动时删除首选项”(在主iPhone设置应用内)。在我的应用程序委托中,我这样做,以便applicationWillEnterForeground检查是否在首选项中设置了设置开关并清除我的设置: 如有必要,[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];

我的问题是:如果我的视图控制器中的viewDidLoad和viewDidAppear因为iOS 4的快速应用程序切换而导致设置更改后没有运行(当我从设置应用程序返回时视图仍然加载),怎么能我提醒这些视图控制器重置设置,以便重新加载所有数据?如果只有一种方法从委托调用[MainViewController initData],但遗憾的是无法完成。看起来除非在视图控制器中发生了一个动作,否则它无法知道检查设置是否已被重置。

非常感谢任何帮助。

1 个答案:

答案 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];