Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSUserdefaults全局默认值_Iphone_Objective C_Ios_Cocoa Touch - Fatal编程技术网

Iphone NSUserdefaults全局默认值

Iphone NSUserdefaults全局默认值,iphone,objective-c,ios,cocoa-touch,Iphone,Objective C,Ios,Cocoa Touch,我正在制作一个应用程序,其中添加了设置(nsuserdefaults) 问题是在我的mainviewcontroller中,我声明用户默认值并获取其值。 但是,由于viewdidload在用户转到“设置”并返回应用程序后不会被调用。 我的设置不更新 我尝试在app delegate application willenterforeground中声明用户默认值 但是如何将消息传递给mainviewcontroller 在应用程序委托中定义的变量在mainviewcontroller中无法识别 更

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

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

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

在应用程序委托中定义的变量在mainviewcontroller中无法识别

更新:我已经宣布

- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSUserDefaults *prefs = [NSUserDefaults  standardUserDefaults];
}
我在设置中有一个切换开关,它启用了标识符\u首选项,所以我写了

   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中将默认值设置为“是”

如果将对象设置为NSUserDefaults,则可以使用应用程序中的任何位置。。无需在appDelagate中创建对象

[[NSUserDefaults standardUserDefaults] setObject:@"Ramu" forKey:@"iCustomerId"];
[[NSUserDefaults standardUserDefaults] synchronize];
您可以在整个应用程序中使用以下行获取该值

[[NSUserDefaults standardUserDefaults] valueForKey:@"iCustomerId"]

如果将对象设置为NSUserDefaults,则可以使用应用程序中的任何位置。。无需在appDelagate中创建对象

[[NSUserDefaults standardUserDefaults] setObject:@"Ramu" forKey:@"iCustomerId"];
[[NSUserDefaults standardUserDefaults] synchronize];
您可以在整个应用程序中使用以下行获取该值

[[NSUserDefaults standardUserDefaults] valueForKey:@"iCustomerId"]

当您弹出时,将不会调用ViewDidLoad。 你需要把代码写进去

视图将出现


每次您访问该视图控制器时都会调用它。

当您返回时,不会调用ViewDidLoad。 你需要把代码写进去

视图将出现


每次您访问该视图控制器时都会调用它。

任何对象都可以为应用程序注册自身,但该应用程序已成为活动通知。只需在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

根据应用程序的结构,第一次启动应用程序时可能会调用或可能不会调用此特定的
应用程序IDBECOMEACTIVE:
方法,您必须进行检查,但之后将始终调用此方法。

任何对象都可以为该应用程序注册自身,因为它已成为活动通知。只需在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


根据应用程序的结构,第一次启动应用程序时可能调用或不调用此特定的
applicationIDBecomeActive:
方法,您必须进行检查,但之后将始终调用此方法。

感谢您的回复。现在有两个问题。我已经在view Dod load中声明了用户默认值。我能否访问它flipsideviewcontroller。?其次,我在设置中使用了切换开关,该开关启用了标识符\u首选项,因此我编写了BOOL循环=[prefs boolforky:@“enabled\u preference”];NSLog(@“%d”,循环);它正在控制台中记录0,但我在plisti中将默认值设置为“是”,我没有理解您的意思…正如我所说的,不需要在viewdidload或ViewWillDisplay中声明任何对象,只需使用两个选项即可..1.setbool forkey和2.BoolWorkeyi如果我没有放置NSUserDefaults*prefs=[NSUserDefaults standardUserDefaults];在viewdidload和viewdidload之外。。这意味着初始值设定项元素不是编译时常量。我真正的问题是boolforkey返回0,而默认情况下它是1。默认情况下,它将返回NO,表示0。如果设置为YES,那么它将返回1(YES)。我知道它将返回1表示YES。。但这就是问题所在。在我的设置root.plist中,我已将默认值设置为“是”。但它仍然返回0。谢谢回复。现在有两个问题。我已经在view Dod load中声明了用户默认值。我能否访问它flipsideviewcontroller。?其次,我在设置中使用了切换开关,该开关启用了标识符\u首选项,因此我编写了BOOL循环=[prefs boolforky:@“enabled\u preference”];NSLog(@“%d”,循环);它正在控制台中记录0,但我在plisti中将默认值设置为“是”,我没有理解您的意思…正如我所说的,不需要在viewdidload或ViewWillDisplay中声明任何对象,只需使用两个选项即可..1.setbool forkey和2.BoolWorkeyi如果我没有放置NSUserDefaults*prefs=[NSUserDefaults standardUserDefaults];在viewdidload和viewdidload之外。。这意味着初始值设定项元素不是编译时常量。我真正的问题是boolforkey返回0,而默认情况下它是1。默认情况下,它将返回NO,表示0。如果设置为YES,那么它将返回1(YES)。我知道它将返回1表示YES。。但这就是问题所在。在我的设置root.plist中,我已将默认值设置为“是”。但它仍然返回0。谢谢回复。现在有两个问题。我已经在view Dod load中声明了用户默认值。我能否访问它flipsideviewcontroller。?其次,我在设置中使用了切换开关,该开关启用了标识符\u首选项,因此我编写了BOOL循环=[prefs boolforky:@“enabled\u preference”];NSLog(@“%d”,循环);它正在控制台中记录0,但我已在plist
viewwillbeen中将默认值设置为yes
不太合适。在很多情况下,当您需要它时,它不会被调用,而在其他情况下,它的调用频率比您希望的要高。是的,会被调用,您甚至可以像Abhi所说的那样使用通知。这取决于您希望如何访问和使用..@Abhi Beckert,您可能是对的,但是不需要注册任何通知,这是可以做到的,这一切都取决于他想要使用的方式……通知有它自己的位置,而视图也有它自己的位置……谢谢回复。现在有两个问题。我已经在view Dod load中声明了用户默认值。我能否访问它flipsideviewcontroller。?其次,我在设置中使用了切换开关,该开关启用了标识符\u首选项,因此我编写了BOOL循环=[prefs boolforky:@“enabled\u preference”];NSLog(@“%d”,循环);它正在控制台中记录0,但我已在plist
viewwillbeen中将默认值设置为yes
不太合适。在许多情况下,当您需要它时,它将不会被调用,而在其他情况下,它的调用频率将超过您在本案例中所希望的。是的,将被调用,您甚至可以像Abhi所说的那样使用通知。这一切都取决于您希望如何访问和使用。@Abhi Beckert,您可能是对的,但无需注册到