Iphone NSUserdefaults全局默认值
我正在制作一个应用程序,其中添加了设置(nsuserdefaults) 问题是在我的mainviewcontroller中,我声明用户默认值并获取其值。 但是,由于viewdidload在用户转到“设置”并返回应用程序后不会被调用。 我的设置不更新 我尝试在app delegate application willenterforeground中声明用户默认值 但是如何将消息传递给mainviewcontroller 在应用程序委托中定义的变量在mainviewcontroller中无法识别 更新:我已经宣布Iphone NSUserdefaults全局默认值,iphone,objective-c,ios,cocoa-touch,Iphone,Objective C,Ios,Cocoa Touch,我正在制作一个应用程序,其中添加了设置(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,但我已在plistviewwillbeen中将默认值设置为yes
不太合适。在很多情况下,当您需要它时,它不会被调用,而在其他情况下,它的调用频率比您希望的要高。是的,会被调用,您甚至可以像Abhi所说的那样使用通知。这取决于您希望如何访问和使用..@Abhi Beckert,您可能是对的,但是不需要注册任何通知,这是可以做到的,这一切都取决于他想要使用的方式……通知有它自己的位置,而视图也有它自己的位置……谢谢回复。现在有两个问题。我已经在view Dod load中声明了用户默认值。我能否访问它flipsideviewcontroller。?其次,我在设置中使用了切换开关,该开关启用了标识符\u首选项,因此我编写了BOOL循环=[prefs boolforky:@“enabled\u preference”];NSLog(@“%d”,循环);它正在控制台中记录0,但我已在plistviewwillbeen中将默认值设置为yes
不太合适。在许多情况下,当您需要它时,它将不会被调用,而在其他情况下,它的调用频率将超过您在本案例中所希望的。是的,将被调用,您甚至可以像Abhi所说的那样使用通知。这一切都取决于您希望如何访问和使用。@Abhi Beckert,您可能是对的,但无需注册到