첫 번째 출시시 userdefaults 키를 사용할 때 AppDelegate에서 초기화 기능을 무시하는 것이 좋습니다. 이렇게하면 사용자 기본값 키가 올바른 값으로 초기화됩니다. 예를 들어, 내 앱 중 하나에서 시작 뷰 컨트롤러를 사용자에게 표시하기 때문에 첫 번째 출시인지 확인하려고합니다. AppDelegate.m 파일에서 다음 함수를 사용하여이를 설정합니다.
+ (void)initialize
{
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"showWelcome"]) {
NSString *mainBundlePath = [[NSBundle mainBundle] bundlePath];
NSString *settingsPropertyListPath = [mainBundlePath
stringByAppendingPathComponent:@"Settings.bundle/Root.plist"];
NSDictionary *settingsPropertyList = [NSDictionary
dictionaryWithContentsOfFile:settingsPropertyListPath];
NSMutableArray *preferenceArray = [settingsPropertyList objectForKey:@"PreferenceSpecifiers"];
NSMutableDictionary *registerableDictionary = [NSMutableDictionary dictionary];
for (int i = 0; i < [preferenceArray count]; i++) {
NSString *key = [[preferenceArray objectAtIndex:i] objectForKey:@"Key"];
if (key) {
id value = [[preferenceArray objectAtIndex:i] objectForKey:@"DefaultValue"];
[registerableDictionary setObject:value forKey:key];
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:registerableDictionary];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
– application:didFinishLaunchingWithOptions:
에는 루트 컨트롤러로보기 컨트롤러를 추가합니다. 필자는 어떤 종류의 런치 뷰 전환을 위해 항상 견고한 "Root View Controller"를 포함하고 싶습니다. UIWindow 하위 뷰 수준에서이를 수행하는 것은 문제가 될 수 있습니다. RootViewController의 – viewDidLoad
은 키에 대한 사용자 기본값을 확인하는 곳입니다.
if ([[NSUserDefaults standardUserDefaults]valueForKey:@"showWelcome"] == [NSNumber numberWithBool:YES]) {
[self pushViewController:[[WelcomeViewController alloc]init] animated:NO];
} else {
[self pushViewController:[[OtherViewController alloc]init] animated:NO];
}
이 모든
은 사용자가 원하는 경우 다시 WelcomeController를 볼 수있는 settings.bundle에 다시 BOOL YES/NO 스위치에 연결되어 있습니다.
덕분에,이 내가 옵션을 사용할 수있게되면이 문제가 해결되면, 대답으로이 표시 도움이 될 수 있습니다 다행 –
좋았어요 :) – MobileOverlord