NSUserdefaults全局默认值

时间:2011-12-08 06:59:23

标签: iphone objective-c ios cocoa-touch

我正在制作一个我添加了设置的应用程序(nsuserdefaults)

问题在于我的mainviewcontroller我声明用户默认值并获取其值。 但是,由于在用户进入设置并返回应用程序后未调用viewdidload。 我的设置不会更新。

我尝试在app delegate applicationwillenterforeground中声明用户默认值 但是我将如何将消息传递给mainviewcontroller。

在appview委托中定义的变量在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中将默认值设置为

3 个答案:

答案 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:方法可能会在您的应用首次启动时调用,也可能不会调用,您必须检查,但之后将始终调用它。