2012-02-20 3 views
0

내 응용 프로그램을 처음 사용하는 경우 도움말 마법사를 통해 사용자를 데려 가고 싶습니다. 내 계획은 특정 키에 대한 사용자 기본값을 조회하는 것이 었습니다. 내 질문은 아이폰 앱의 초기보기를 다시 라우팅하는 가장 좋은 방법은 무엇입니까? 앱 위임자에서 발생합니까? 첫 번째보기 컨트롤러에 리 라우트가 있어야합니까? 초기 뷰의 탐색 컨트롤러에서 setRootView를 호출해야합니까? 스토리 보드에서 끝났습니까?목표 C 처음 사용시 루트보기 변경

매우 혼란스럽고 좋은 방법이 있는지 궁금합니다.

나는 앱이 이전에 구성된 경우 IOS 5

정말 고마워요, 로스

답변

2

첫 번째 출시시 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 스위치에 연결되어 있습니다.

SettingsBundle

+0

덕분에,이 내가 옵션을 사용할 수있게되면이 문제가 해결되면, 대답으로이 표시 도움이 될 수 있습니다 다행 –

+0

좋았어요 :) – MobileOverlord

0

내가 관리의 환경 설정을 사용하여 사용 (기본값은 물론, 'NO'이다), 그리고 만약 존재하지 구성을 통해 사용자를 안내하는 전체 화면 모달 대화 상자.

[tabBarController presentModalViewController:configurationController animated:YES]; 

또한 애플 대리자에서 주로 수행되지만 사용자가 등, 초기 구성 프로세스를 중단하면 다른 곳에서 호출 할 수 있습니다, 그리고 그것은 매우 잘 작동합니다.