Iphone Can';t在ApplicationIDFinishLaunching中使用if查询设置自定义背景色
我的程序通常有一个标准背景:“black.jpg”。 在ApplicationIDFinishLaunching中,我执行了以下操作:Iphone Can';t在ApplicationIDFinishLaunching中使用if查询设置自定义背景色,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我的程序通常有一个标准背景:“black.jpg”。 在ApplicationIDFinishLaunching中,我执行了以下操作: [window addSubview:viewController.view]; [window makeKeyAndVisible]; viewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"black.jpg"]];
[window addSubview:viewController.view];
[window makeKeyAndVisible];
viewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"black.jpg"]];
我有一个漂亮的黑色背景。现在我想改变我的背景,为此我做了一个选择。首选项的默认值为2,那么为什么代码不起作用呢
[window addSubview:viewController.view];
[window makeKeyAndVisible];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
int bla = [prefs stringForKey:@"background_key"];
NSlog(@"%@", bla) //Console says 2!!
if (bla == 2) {
viewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"black.jpg"]];
}
视图没有自定义背景。谢谢你的帮助 1)嗯,%@限定词让我很扫兴。。。我认为这是为NS*对象保留的。但是如果你得到2,那很酷。不过,我通常会使用%d作为限定符
2) int bla=[prefs stringForKey:@“background_key”];
返回字符串,而不是整型
3) 你的比较很可能被套住了…1)嗯,好吧,%@限定符把我甩了。。。我认为这是为NS*对象保留的。但是如果你得到2,那很酷。不过,我通常会使用%d作为限定符
2) int bla=[prefs stringForKey:@“background_key”];
返回字符串,而不是整型
3) 你的比较很可能被套住了…编辑:查看评论了解真正的原因:) 首先使用
intValue
int bla = [[prefs stringForKey:@"background_key"] intValue];
然后比较。编辑:查看评论了解真正的原因:) 首先使用
intValue
int bla = [[prefs stringForKey:@"background_key"] intValue];
然后比较。一系列独特的问题让你困惑:
int bla = [prefs stringForKey:@"background_key"];
bla现在是一个int值,它保存NSString对象的地址
NSlog(@"%@", bla) //Console says 2!!
应该如此,因为%@说“在我要传递的地址获取对象,并请求描述”。因为字符串“2”的描述是“2”,所以可以看到“2”。。。如果希望format语句正确打印int,则需要使用“%d”,而不是“%@”
但bla不是2。它有点像192322,因为它同样持有一个对象的地址,而不是指向该对象的指针
如果您真的想比较into,请对prefs调用的结果使用intValue,正如其他人所说。我想你可能想理解为什么NSLog似乎误导了你。一系列独特的问题让你困惑:
int bla = [prefs stringForKey:@"background_key"];
bla现在是一个int值,它保存NSString对象的地址
NSlog(@"%@", bla) //Console says 2!!
应该如此,因为%@说“在我要传递的地址获取对象,并请求描述”。因为字符串“2”的描述是“2”,所以可以看到“2”。。。如果希望format语句正确打印int,则需要使用“%d”,而不是“%@”
但bla不是2。它有点像192322,因为它同样持有一个对象的地址,而不是指向该对象的指针
如果您真的想比较into,请对prefs调用的结果使用intValue,正如其他人所说。我只是想你可能想了解为什么NSLog似乎误导了你。2。否首选项是NSNumber,因此他返回一个NSNumber。2。否首选项是一个NSNumber,因此他返回一个NSNumber。
NSLog(@“%@,[bla class])
打印出什么?使用intValue:(null),不使用alsoWell,那么,您有您的理由-设置未设置!您如何设置首选项?使用setInteger:forKey:
?然后,您必须使用integerworky:
,而不是stringForKey:
。使用此选项:(backgr是一个NSNumber)backgr=[[NSNumber alloc]initWithInt:2];backgr=[prefs stringForKey:@“background_key”];但此代码不设置首选项。您必须执行类似于[prefs setInteger:2 forKey:@“background\u key”]
的操作来保存首选项。然后通过intbla=[prefs integerworkey:@“background_key”]
读取它。另外,设置保存首选项的设置后,不要忘记[prefs synchronize]
!NSLog(@“%@,[bla class])
打印出什么?使用intValue:(null),如果没有alsoWell,那么您有您的理由-设置未设置!您如何设置首选项?使用setInteger:forKey:
?然后,您必须使用integerworky:
,而不是stringForKey:
。使用此选项:(backgr是一个NSNumber)backgr=[[NSNumber alloc]initWithInt:2];backgr=[prefs stringForKey:@“background_key”];但此代码不设置首选项。您必须执行类似于[prefs setInteger:2 forKey:@“background\u key”]
的操作来保存首选项。然后通过intbla=[prefs integerworkey:@“background_key”]
读取它。另外,设置保存首选项的设置后,不要忘记[prefs synchronize]
!