我正在制作一个我添加了设置的应用程序(nsuserdefaults)
问题在于我的mainviewcontroller我声明用户默认值并获取其值。 但是,由于在用户进入设置并返回应用程序后未调用viewdidload。 我的设置不会更新。
我尝试在app delegate applicationwillenterforeground中声明用户默认值 但是我将如何将消息传递给mainviewcontroller。
更新:我已宣布
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
}
我在具有标识符enabled_preference的设置中切换开关,所以我写了
else
{
[PlaySound prepareToPlay];
[prefs setBool:YES forKey:@"enabled_preference"];
BOOL loop = [prefs boolForKey:@"enabled_preference"];
NSLog(@" %d",loop);
do {
[PlaySound play];
} while (loop ==YES);
它在控制台中记录0但是我在plist中将默认值设置为
答案 0 :(得分:2)
如果您将对象设置为NSUserDefaults,则可以使用app中的任何位置..无需在appDelagate中创建对象...
[[NSUserDefaults standardUserDefaults] setObject:@"Ramu" forKey:@"iCustomerId"];
[[NSUserDefaults standardUserDefaults] synchronize];
您可以使用以下行
在整个应用中获取该值[[NSUserDefaults standardUserDefaults] valueForKey:@"iCustomerId"]
答案 1 :(得分:1)
当您弹回ViewDidLoad时,不会被调用。 您需要在
中编写该代码viewWillAppear中
每当你到那个视图控制器时都会调用它。
答案 2 :(得分:1)
任何对象都可以注册自己,因为应用程序确实成为活动通知。只需在MainViewController中执行此操作:
@implementation MainViewController
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self]; // your app may crash randomly if you don't do this
[super dealloc];
}
- (void)applicationDidBecomeActive:(NSNotification *)notification
{
// check user defaults for changes
}
@end
根据您的应用的结构方式,这个特定的applicationDidBecomeActive:
方法可能会在您的应用首次启动时调用,也可能不会调用,您必须检查,但之后将始终调用它。