看起來這個話題出現了很多。我通讀了幾個答案,但沒有一個與我的相同,所以請原諒我,如果你以前見過類似的話。不平衡的調用開始/結束外觀轉換爲(我相信這是UINavigationController相關)
我所有的UIViewControllers都由UINavgationController控制。在第一個UIViewController(SMOnboardingPhotoMarketingViewController)上,我調用我的鑰匙串包裝類來查看是否有任何人登錄(應用程序恢復)。如果是這樣,我調用segue去我的主登錄屏幕(SMThumbnailViewController),我得到錯誤消息:不平衡調用開始/結束外觀轉換。
我已經檢查了所有的視圖控制器生命週期調用,以確保我調用[超級方法],如果我重複它們。完成。
除此之外,這只是所有轉換的標準推式類型。我不明白這個調用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];
}
}
實際上,它看起來像我的SMAuthenticate調用兩次調用完成塊會給出錯誤的意義。但是,這是另一個故事。 – VaporwareWolf