2014-05-01 2 views
0

전체NSUSer 기본값 및 애플리케이션 스 와이프

이 질문에 대한 답변을 찾을 수 없습니다. View Controller 설정은 시동시에만 한 번 표시해야합니다. 그래서 앱 스토어/테스트 비행에서 앱을 다운로드 할 때.

나는 그것이 정확하다. 그래서 그것은 그것을 실행한다, 그것은 멋지다. 설정 페이지를 끝내면 기본 페이지로 이동하고 앱을 배경으로 이동하면 중단 된 부분부터 계속 이동합니다. 하지만 ... 홈 버튼을 두 번 눌러 앱을 스 와이프하고 앱을 눌러 (ios7) 앱을 다시 설정 화면으로 돌아가지만 중단 한 부분부터 계속 수행해야합니다.

그래서 내 응용 프로그램 위임에, 내가 가진 :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

{ 
    NSString *savedValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"SettingsShown"]; 
    NSLog(@"%@", savedValue); 
    Reachability *reachability = [Reachability reachabilityWithHostname:@"www.outtonightapp.com"]; 
    [reachability startNotifier]; 

    NSUserDefaults *settingsscreen = [NSUserDefaults standardUserDefaults]; 
    [settingsscreen registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstTime", nil]]; 
    //BOOL firstTime = [settingsscreen boolForKey:@"firstTime"]; 
    BOOL firstTime = [settingsscreen boolForKey:@"SettingsShown"]; 

    if (!firstTime) { 
    //if (firstTime==YES) { 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SettingsShown"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
     self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"SetUpNav"]; 
    } 

    else 
    { 
     return YES; 
    } 

내가 .. 어떤 조언이 좋은 것 내 설정 VC를 다시했다 때까지 일을했다.

+0

왜 * default * user-defaults에서''firstTime "'을 사용하고 그 값으로''SettingsShown"'을 사용합니까? – Droppy

+0

Droppy, 나는 이걸 포기한다. 조언을 해줄 수 있니? – user3480715

+0

글쎄, 차이가 있지만'registerDefaults' 라인에서 사용하는 키를 살펴볼지는 모르겠다.''firstTime''에서''SettingsShown''으로 변경하고 도움이되는지 확인하십시오. – Droppy

답변

0

유사한 상황에서 위임 패턴을 사용했습니다.

초기보기 컨트롤러 initialVC가 있다고 가정합니다. 그리고 특수 설정보기 컨트롤러 (SetUpNav)는 기본값이 설정되지 않은 경우에만 처음 실행됩니다. 그런 다음 작업을 수행 할 수 있습니다 : SetUpNavViewController.h과 재산 "개시"에

  1. 사용자가 정의 SetUpNavdelegate 프로토콜을 당신의 InitialVC '의 viewDidLoad에서 해당 프로토콜
@protocol SetUpNavDeleagte; 

@interface SetUpNavViewController : UIViewController 
@property (strong,nonatomic) id <SetUpNavdelegate> initiator; 
// the rest 
@end 
@protocol SetUpNavdelegate <NSObject> 
-(void)setupFinished; 
@end 
  1. 에 부합하는 당신은 :
    • 확인 기본값은 제대로 설정되어 있는지 여부에 따라 결정됩니다
: 당신의 setUpNavViewController에서 코드

-(void)viewDidLoad 
{ 
    // Check your defaults for consistency 
    if (firstTime){ 
     UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main OR you SB name" bundle:nil]; 
     UIViewController *setUpNavVC = [loginStoryboard instantiateViewControllerWithIdentifier:@"SetUpNav"]; 
     setUpNavVC.initiator = self; 
     YouAppDelegateClass *appDelegate = [[UIApplication sharedApplication] delegate]; 
     appDelegate.window.rootViewController = setUpVC; 
     // Here you don't need animation as I assume it is the very first screen 
    } 
    // ... the rest 
} 


-(void)setupFinished 
{ 
    // Here You animately restoring your initial vc. 
    YouAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    appDelegate.window.rootViewController = self; // This line is for device orientation sync 
    [UIView transitionWithView:appDelegate.window 
         duration:FINISH_DURATION 
         options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionCurveEaseInOut 
        animations:^{ appDelegate.window.rootViewController = self; } 
        completion:nil]; 
    // setUpNav controller will be dealloced by ARC 
} 
  1. 에서 북동 "firstTime"BOOL 값

및 화재 setUpNav 컨트롤러는 당신은 당신이 당신의 위임에 알림을 설정 한 모든 기본값 작업을 완료 한 후

[self.initator setupFinished]; 

may app에서는이 설정 작업이 실제로는 별도의 스토리 보드이며 자체 설정 워크 플로가 있습니다. 이 방법을 사용하는 방식으로 처음에는 표시 할 수 없지만 앱의 사용자 기본값이 제대로 설정되지 않은 경우 (예 : 설정 번들을 사용하는 경우). 네비게이션 스택 또는 팝 오버 (iPad 경우)로 모달로 표시 할 수 있습니다. 보다 일반적인 접근 방식입니다.

요약 : 시작한 사람은 끝냅니다.