2012-04-11 3 views
0

내 응용 프로그램에서 UISwitch 상태를 유지할 수없는 문제가 있습니다. 나는이 문제를 해결하기 위해 여러 가지 다른 튜토리얼과 코드 소스에서 많은 예제를 시도해 왔으며, 전체 그림을 보지 않고 있다고 생각한다.문제 설정 UISwitch가 저장된 NSUserDefaults 값

나는 사용자 환경 설정 화면을 설정 한, 관련 코드는 다음과 같습니다

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
// Trying here to check whether user has run app previously, and if not set default switch value (as defined in IB) 
NSString *firstRunValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"testSwitch"]; 
if (!firstRunValue) { 
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"testSwitch"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

return YES; 
} 

OptionsViewController.h

@property (weak, nonatomic) IBOutlet UISwitch *testSwitch; 

OptionsViewController.m

@synthesize testSwitch; 

. 
. 
. 

- (void)viewDidLoad 
{ 

[super viewDidLoad]; 
// Here's the issue - following line does NOT set switch as expected from defaults... 
[testSwitch setOn:[[NSUserDefaults standardUserDefaults] boolForKey:@"testSwitch"] animated:NO]; 

} 

. 
. 
. 

- (IBAction)updateTest:(id)sender { 
// Action called when switch is clicked to save new state, Log shows 0 or 1 as expected 
[[NSUserDefaults standardUserDefaults] setBool:[sender isOn] forKey:@"testSwitch"]; 
NSLog(@"%@", [[NSUserDefaults standardUserDefaults]valueForKey:@"testSwitch"]); 
} 

. 
. 
. 

- (IBAction)saveOptions:(id)sender { 

// When user clicks "Save" and exits, I synch defaults and dump them, again output is as expected 
[[NSUserDefaults standardUserDefaults] synchronize]; 
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); 
[self dismissModalViewControllerAnimated:YES]; 
} 

누군가 내가 잘못 가고있는 곳을 알려 주면 (Objective-C가 아닌 영어로)! 고마워요, 고마워요!

+0

당신이'는 NSString * firstRunValue = [[NSUserDefaults standardUserDefaults] stringForKey "testSwitch"@]에서 무엇을 얻을 확인 했; 처음 실행 후'? boolian 값에서 문자열을 가져 오려고합니다. 나는 거기에서 일어날 일을 모른다. – dasdom

+0

NSUserDefaults가 어디에 저장되어 있는지 잘 모르겠지만 어디에도 보이지 않지만 NSLog에 덤프하면 아무 것도 표시되지 않습니다. 그러나 이것이 분명히 문제이기는하지만 문제는 아닐 것입니다. IB에서는 기본적으로 OFF로 설정되어 있으며 스위치를 켜면 상태가 유지되지 않습니다. – user1326192

+0

예,'if (! firstRunValue)'가 항상 true이기 때문에 그렇습니다. 내 대답을 보라. – dasdom

답변

0

이 시도 :

NSString *firstRunValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"firstRun"]; 

if (!firstRunValue) { 
    [[NSUserDefaults standardUserDefaults] setObject: @"BlaBla" forKey:@"firstRun"]; 
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"testSwitch"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
+0

안녕하세요, "NSUserDefaults에 대한 표시되지 않는 @interface '선택기'setString : forKey : '"선언하는 오류가 나타납니다? – user1326192

+0

내 대답을 편집했습니다. 'setString : forKey :'는 존재하지 않습니다. 그것은'setObjekt : forKey :'입니다. – dasdom

+0

고마워요, 오류가 수정되었습니다 - 코드가 모두 정상적으로 실행되지만 스위치가 올바르게 설정되지 않았습니다. 앱을 실행하면 기본적으로 꺼져 있습니다 (실제로 IB로 설정되고 appDelegate에서도 설정 됨). 스위치를 켜고 저장하면 로그에 올바른 설정이 저장되지만 옵션으로 돌아 가면 화면이 아직 꺼져 있습니다 ... – user1326192