Не могу установить пользовательский backgroundColor с помощью if-запроса в applicationDidFinishLaunching - PullRequest
0 голосов
/ 11 января 2010

моя программа обычно имеет стандартный фон: "black.jpg". В приложении DidFinishLaunching я сделал следующее:

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

Вид не имеет собственного фона. Спасибо за вашу помощь!

Ответы [ 3 ]

4 голосов
/ 11 января 2010

изменить: см. Комментарии по реальной причине:)

Первое использование intValue

int bla = [[prefs stringForKey:@"background_key"] intValue];

, а затем сравнить.

0 голосов
/ 12 января 2010

Уникальное слияние проблем смутило вас:

int bla = [prefs stringForKey:@"background_key"];

bla теперь является значением типа int, которое содержит адрес объекта NSString.

NSlog(@"%@", bla) //Console says 2!!

Как и положено, так как% @ говорит "возьмите объект по адресу, который я передаю, и попросите описание". Поскольку описание строки «2» равно «2», вы видите «2» ... Если вы хотите, чтобы оператор формата правильно печатал int, вам нужно будет использовать «% d», а не «% @».

if (bla == 2) {
    viewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"black.jpg"]];
}

Но бла не 2. Это что-то вроде 192322, потому что опять же он содержит адрес объекта, а не указатель на объект.

Если вы действительно хотите сравнить данные, используйте intValue для результата вызова prefs, как уже говорили другие. Я просто подумал, что вы, возможно, захотите понять, почему NSLog, похоже, вводил вас в заблуждение.

0 голосов
/ 11 января 2010

1) Хм, ну, квалификатор% @ меня отбрасывает ... Я думал, что зарезервировано для NS * объектов. Но если вы получаете 2, это круто. Я бы обычно использовал% d в качестве классификатора, хотя

2) int bla = [prefs stringForKey: @ "background_key"]; Возвращает строку, а не int ...

3) Ваше сравнение, вероятно, скрыто ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...