xcode 6升级导致为segue滞后显示屏幕做准备



我在Xcode 5.1.1中开发了一款针对iOS 7的应用程序。我最近升级到了Xcode 6,并清理了所有内容以确保功能。唯一没有完全工作的是登录后的segue触发器,它现在正在闪烁我试图跳过的视图的屏幕。这是一个已知的问题吗?我该如何避开它?它在Xcode 5.1.1中运行良好。

为了在文本中重述,我有一个登录屏幕,它切换到导航控制器。导航控制器中的第一个视图控制器是仪表板,第二个是欢迎屏幕。在他们登录后,我正在加载导航控制器,但跳过仪表板并自动切换到欢迎屏幕。此分段在仪表板中执行,将显示分段代码视图(见下文)。

- (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];
    }
}

这里有两个问题。

  1. 你总是要打电话给[super viewWillAppear:animated:]。省略此调用会导致未定义的行为
  2. 当另一个屏幕转换正在进行时,您不能呈现新屏幕。这也会导致未定义的行为。即不要在viewWillAppearviewWillDisappear中显示另一个屏幕

您应该同时设置两个视图控制器来创建UINavigationController

最新更新