无法在applicationDidFinishLaunching中使用if-query设置自定义backgroundColor

时间:2010-01-11 20:33:27

标签: iphone objective-c xcode

我的程序通常有一个标准背景:“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"]];
        }

视图没有自定义背景。谢谢你的帮助!

3 个答案:

答案 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似乎误导了你。