1

看起来这个话题出现了很多。我阅读了几个答案,但没有一个与我的情况相同,所以如果您以前见过类似的情况,请原谅。

我所有的 UIViewControllers 都由 UINavgationController 控制。在第一个 UIViewController (SMOnboardingPhotoMarketingViewController) 上,我调用我的钥匙串包装类来查看是否有人登录(应用程序恢复)。如果是这样,我调用 segue 转到我的主登录屏幕 (SMThumbnailViewController),我在其中收到错误消息:不平衡调用开始/结束外观转换。

我检查了所有视图控制器生命周期调用,以确保如果我过度使用它们,我正在调用[超级方法]。完毕。

除此之外,这只是所有转换的标准推送类型segue。我不明白这个对 segue 的调用与由按钮操作触发的所有其他调用有何不同。这是我的第一个视图控制器的代码:

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self loadScrollViewContent];

    __weak SMOnboardingPhotoMarketingViewController *weakSelf = self;
    [SMAuthentication validateStoredTokenWithCompletion:^(BOOL valid) {
        if(valid){
            NSLog(@"Logged in. Continue to thumbs page");
            [weakSelf performSegueWithIdentifier:kSeguePhotoMarketingToThumbnails sender:self];
        }
        else{
            [SMAuthentication logOut];
            NSLog(@"invalid credentials stored. User must log in ");
        }
    }];
}

我注意到在我的主视图控制器(上述代码导航到的那个)中,调用了 viewDidLoad,但从未调用过 viewDidAppear。什么会导致这种不平衡?

编辑:添加信息。如果我将 segue 调用移到该块的外部,我应该声明,转换会正常进行,没有错误。例子:

// I know this is ugly. It is for testing only
-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self loadScrollViewContent];
    __block BOOL complete = NO;
    __block BOOL isValid = NO;

    [SMAuthentication validateStoredTokenWithCompletion:^(BOOL valid) {
        if(valid){
            NSLog(@"Logged in. Continue to thumbs page");
            isValid = YES;
        }
        else{
            [SMAuthentication logOut];
            NSLog(@"invalid tokens stored. User must log in ");
        }
        complete = YES;
    }];



    while (!complete) {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }

    if(isValid){
        [self performSegueWithIdentifier:kSeguePhotoMarketingToThumbnails sender:self];
    }

}
4

1 回答 1

0

您可能已经实现了以下 ViewController 自定义容器方法:

- (void)endAppearanceTransition
- (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated

我曾经在基类中编写并忘记了它们,当使用情节提要时,它们将整个外观都转发给子控制器。

于 2013-11-06T13:13:43.327 回答