내 응용 프로그램에서 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가 아닌 영어로)! 고마워요, 고마워요!
당신이'는 NSString * firstRunValue = [[NSUserDefaults standardUserDefaults] stringForKey "testSwitch"@]에서 무엇을 얻을 확인 했; 처음 실행 후'? boolian 값에서 문자열을 가져 오려고합니다. 나는 거기에서 일어날 일을 모른다. – dasdom
NSUserDefaults가 어디에 저장되어 있는지 잘 모르겠지만 어디에도 보이지 않지만 NSLog에 덤프하면 아무 것도 표시되지 않습니다. 그러나 이것이 분명히 문제이기는하지만 문제는 아닐 것입니다. IB에서는 기본적으로 OFF로 설정되어 있으며 스위치를 켜면 상태가 유지되지 않습니다. – user1326192
예,'if (! firstRunValue)'가 항상 true이기 때문에 그렇습니다. 내 대답을 보라. – dasdom