Iphone Can';t在ApplicationIDFinishLaunching中使用if查询设置自定义背景色

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"]];

我的程序通常有一个标准背景:“black.jpg”。 在ApplicationIDFinishLaunching中,我执行了以下操作:

   [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]