2010-12-09 38 views
1

我为您的应用程序设置了一个设置面板,您可以将其设置为“在下次启动时擦除偏好设置”(主iPhone设置应用程序内)。在我的应用程序的代表中,我做了这样的事情,以便applicationWillEnterForeground将检查设置开关是否设置在首选项中,并根据需要清除我的设置: [NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];(如有必要)。通过快速切换应用程序来重置iOS4中的应用程序设置的最佳方式

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

任何帮助将不胜感激。

回答

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]; 
} 

和拆卸的viewController作为viewDidUnload观察员:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
+0

非常感谢你的回复,马修。我会看看我现在是否可以实现这一点,并让你知道(对不起,如果我仍然是一个新手)。 – Jackson 2010-12-10 03:44:09

相关问题