我的程序通常有一个标准背景:“black.jpg”。 在applicationDidFinishLaunching中,我做了以下事情:
[window addSubview:viewController.view];
[window makeKeyAndVisible];
viewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"black.jpg"]];
我有一个漂亮的黑色背景。现在我想改变我的背景,为此我做了一个偏好。首选项的defaultValue为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"]];
}
视图没有自定义背景。谢谢你的帮助!
答案 0 :(得分:4)
编辑:查看评论的真正原因:)
首先使用intValue
int bla = [[prefs stringForKey:@"background_key"] intValue];
然后比较。
答案 1 :(得分:0)
1)嗯,%@ qualifier会把我抛弃......我认为这是为NS *对象保留的。但如果你得到2,那很酷。我通常使用%d作为限定符
2)int bla = [prefs stringForKey:@“background_key”]; 返回一个字符串,而不是int ...
3)你的比较可能已经被扼杀......
答案 2 :(得分:0)
一系列独特的问题困扰着你:
int bla = [prefs stringForKey:@"background_key"];
bla现在是一个int值,它保存NSString对象的地址。
NSlog(@"%@", bla) //Console says 2!!
应该如此,因为%@说“把对象放在我传入的地址,并要求说明”。由于字符串“2”的描述为“2”,您会看到“2”...如果您希望格式语句正确打印int,则需要使用“%d”,而不是“%@”。< / p>
if (bla == 2) {
viewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"black.jpg"]];
}
但bla不是2.它类似于192322,因为它再次持有对象的地址,而不是指向对象的指针。
如果你真的想要进行比较,请在prefs调用的结果上使用intValue,正如其他人所说的那样。我只是想你可能想知道为什么NSLog似乎误导了你。