(xCode 4.2.1) У меня есть приложение Utility с парой пользовательских настроек в виде обратной стороны для изменения внешнего вида UIImageView в главном контроллере вида. Эта часть у меня отлично работает. Я могу напечатать свои значения по умолчанию с NSLog, и все действия, кажется, работают без сбоев.
Я работаю только с одним ключом, а именно: «skinPreference», который я использую для простого переключения фонового изображения в MainViewController.
Моя проблема - оператор if в моей функции Flipside ViewDidLoad. Несмотря на то, что я могу извлечь правильное значение из «skinPreference», он не отвечает на первую половину этого оператора if и всегда выполняет часть «else». Я отображаю зеленую точку рядом с кнопкой, которую пользователь установил в качестве предпочтительной темы оформления по умолчанию. Кажется, всегда, когда вы запускаете приложение, оно запускается из красного дерева, независимо от того, что я делаю, но я вижу правильное значение в журнале.
Вот оператор if, вызывающий проблемы. Мне нужно, чтобы он получил значение «skinPreference», что он делает, согласно NSLog, и соответственно установил изображения. Это не работает.
Flipside.m
- (void)viewDidLoad
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *skinPref = [defaults valueForKey:@"skinPreference"];
if (skinPref == @"Classic") {
NSLog(skinPref, @"@%");
imgClassicDot.image = [UIImage imageNamed:skinPref];
imgMahoganyDot.image = [UIImage imageNamed:skinPref];
} else {
NSLog(skinPref, @"@%");
imgClassicDot.image = [UIImage imageNamed:@"dot"];
imgMahoganyDot.image = [UIImage imageNamed:@"dotGreen"];
}
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
В моем приложении, у меня есть следующий код, который гарантирует, что ключ имеет значение, если приложение загружается в первый раз: (и NSLog каждый раз возвращает правильную настройку)
AppDelegate.m (в didFinishLaunchingWithOptions)
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *pref = [defaults valueForKey:@"skinPreference"];
if (pref == nil) {
NSLog(@"%@ DEFAULTS = %@", [self class], [defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]);
[defaults setValue:@"Classic" forKey:@"skinPreference"];
[defaults synchronize];
}
В моем Flipside.h у меня есть пара пользовательских методов, которые я запускаю из 2 кнопок. (SkinDidChangeToClassic и skinDidChangeToMahogany)
@protocol FlipsideViewControllerDelegate
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
- (void)skinDidChangeToClassic;
- (void)skinDidChangeToMahogany;
@end
И вот эти два метода в моем MainViewController.m
- (void)skinDidChangeToClassic {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:@"Classic" forKey:@"skinPreference"];
NSString *skinPref = [defaults valueForKey:@"skinPreference"];
[defaults synchronize];
skin.image = [UIImage imageNamed:skinPref];
}
- (void)skinDidChangeToMahogany {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:@"Mahogany" forKey:@"skinPreference"];
NSString *skinPref = [defaults valueForKey:@"skinPreference"];
[defaults synchronize];
skin.image = [UIImage imageNamed:skinPref];
}
И, наконец, здесь я запускаю методы с обратной стороны. M
- (IBAction)setSkinClassic:(id)sender
{
imgClassicDot.image = [UIImage imageNamed:@"dotGreen"];
imgMahoganyDot.image = [UIImage imageNamed:@"dot"];
[self.delegate skinDidChangeToClassic];
}
- (IBAction)setSkinMahogony:(id)sender
{
imgClassicDot.image = [UIImage imageNamed:@"dot"];
imgMahoganyDot.image = [UIImage imageNamed:@"dotGreen"];
[self.delegate skinDidChangeToMahogany];
}
Я не гуру, поэтому любые идеи будут очень признательны.