Уникальное слияние проблем смутило вас:
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, похоже, вводил вас в заблуждение.