2014-10-01 5 views
0

저는 최근에 Xcode 6으로 업그레이드했으며 기능을 보장하기 위해 모든 것을 정리했습니다. 완전히 작동하지 않는 단 한가지는 바로 로그인 트리거 (segue trigger post login)입니다. 이제는 건너 뛰려는 화면의 화면이 깜박입니다. 이것은 알려진 문제입니까? 어떻게해야합니까? 그것은 Xcode 5.1.1에서 잘 작동했습니다.xcode 6 업그레이드로 인해 segue lag showing screen 준비가 완료되었습니다.

텍스트를 다시 요약하면 Navigation Controller와 연결되는 로그인 화면이 있습니다. 탐색 컨트롤러의 첫 번째보기 컨트롤러는 대시 보드이고 두 번째 컨트롤러는 시작 화면입니다. 로그인 한 후 Nav Controller를로드하지만 대시 보드를 건너 뛰고 시작 화면을 자동으로 표시합니다. 이 segue는 대시 보드 segue 코드 뷰에서 수행됩니다 (아래 참조).

- (void)viewWillAppear:(BOOL)animated 
{ 
    if (self.pushToHomePage) 
    { 
     [SVProgressHUD showWithStatus:@"Loading..."]; 
     self.pushToHomePage = NO; 

     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     [defaults setBool:NO forKey:@"WelcomeCached"]; 
     [defaults setObject:nil forKey:@"WelcomeItems"]; 
     [defaults setObject:nil forKey:@"WelcomeSliders"]; 
     [defaults setObject:nil forKey:@"WelcomeEvents"]; 

     [self performSegueWithIdentifier:@"HomePageSegue" sender:self]; 
    } 
    else if (self.pushToTradeSignals) 
    { 
     [SVProgressHUD showWithStatus:@"Loading..."]; 
     self.pushToTradeSignals = NO; 

     [self performSegueWithIdentifier:@"TradeSignalsSegue" sender:self]; 
    } 
    else 
    { 
     [super viewWillAppear:animated]; 

     PFUser *user = [PFUser currentUser]; 

     self.lblName.text = [user objectForKey:@"name"]; 

     PFFile *imgProf = [user objectForKey:@"ProfilePic"]; 
     [self.imgProfile setImageWithURL:[NSURL URLWithString:imgProf.url] 
         placeholderImage:[UIImage imageNamed:@"default_user_icon.png"]]; 

     NSArray *parts = [self.lblName.text componentsSeparatedByString:@" "]; 

     if (parts != nil && parts.count > 1) 
      [self.lblName boldSubstring:parts[1]]; 

     for (NSIndexPath *indexPath in self.tableView.indexPathsForVisibleRows) 
     { 
      [self.tableView deselectRowAtIndexPath:indexPath animated:NO]; 
      UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
      [self setCellColor:[UIColor clearColor] ForCell:cell]; 
     } 

     [self.navigationController.toolbar setBarTintColor:[UIColor whiteColor]]; 
     [self.navigationController.toolbar setBackgroundColor:[UIColor whiteColor]]; 

     [self.navigationController.toolbar setTintColor:[UIColor darkGrayColor]]; 
     [self.navigationController.toolbar setTranslucent:NO]; 

     [self.navigationController.toolbar setBackgroundImage:[UIImage new] 
              forToolbarPosition:UIBarPositionAny 
                barMetrics:UIBarMetricsDefault]; 
     [self.navigationController.toolbar setShadowImage:[UIImage new] 
             forToolbarPosition:UIToolbarPositionAny]; 

     [self.navigationController setNavigationBarHidden:YES animated:YES]; 
     [self.navigationController setToolbarHidden:NO animated:YES]; 
    } 
} 
+0

'viewDidLoad'와'viewWillAppear :'에서'performSegueWithIdentifier : sender :'를 호출하는 비슷한 문제에 대한 보고서가 있습니다. 'viewDidAppear :'에서 호출 해보십시오. –

+0

감사합니다. 아론. ViewWillAppear 후에 DidAppear가 호출되지 않습니까? 시작 화면으로 전환하기 전에 대시 보드가 "깜박 거림"하지 않으려 고합니다. –

답변

1

여기에는 두 가지 문제가 있습니다.

  1. 항상 [super viewWillAppear:animated:]으로 전화해야합니다. 이 호출을 생략하면 정의되지 않은 동작이 발생합니다.
  2. 이미 다른 화면 전환이 진행 중일 때 새 화면을 표시하면 안됩니다. 또한 정의되지 않은 동작이 발생합니다. 나는. viewWillAppear 또는 viewWillDisappear 안에 다른 화면을 표시하지 마십시오.

두보기 컨트롤러를 모두 한 번에 설정하여 UINavigationController을 만들어야합니다.

+0

후속 조치를 보내 주셔서 감사합니다. 그래서 Nav Controller를 Storyboard에서 생성하고 두 View Controller를 모두 설정했습니다. 어떻게하면 두 번째 View Controller에서 시작되지만 첫 번째 View Controller를 포함한 계층 구조를 유지할 수 있습니까? –

+0

Storyboard를 사용하지 않으므로 여기에서 추측해야합니다. 두보기 컨트롤러를 탐색 컨트롤러의 루트로 할당 할 수 있다면 즉시 두 번째 화면에서 시작해야합니다. 그렇지 않다면 UIStoryboard의 instantiateViewController ... 메소드를 사용하여 코드에서 수동으로 두 번째보기 컨트롤러를 인스턴스화하고 nav 컨트롤러를 표시하기 전에 애니메이션없이 Nav 컨트롤러에 푸시해야합니다. – fluidsonic

+0

스토리 보드에서 다음과 같이 진행됩니다. Nav 컨트롤러 -> 대시 보드 (루트) -> 환영합니다. 내가 그것을 좋아하는 이유는 시작 화면에 대시 보드 (프로파일/설정 화면과 같은 종류)의 계층에서 뒤로 이동하는 단추가 있기 때문입니다. –

관련 문제