Несбалансированные вызовы для начала / окончания переходов внешнего вида для <UITabBarController: 0x197870> - PullRequest
111 голосов
/ 25 октября 2011

Я читал ТАК о другом пользователе, который сталкивался с подобной ошибкой , но эта ошибка в другом случае.

Я получил это сообщение при первоначальном добавлении View Controller:

Unbalanced calls to begin/end appearance transitions for 
<UITabBarController: 0x197870>

Структура приложения выглядит следующим образом:

У меня есть TabBarController с 5 вкладками, связанный с 5 View Controllers. На начальной вкладке показа я вызываю новый View Controller для наложения как введение в приложение.

Я использую этот код для вызова контроллера представления представления:

IntroVC *vc = [[IntroVC alloc] init];
[self presentModalViewController:vc animated:YES];
[vc release]; 

После того, как появится этот IntroVC контроллер отображения, появится указанная выше ошибка.

p.s. Я использую xCode 4.2 и iOS 5.0 SDK, разрабатываю приложение для iOS 4.3.

Ответы [ 21 ]

0 голосов
/ 31 августа 2015

Как и предполагал @danh, моя проблема заключалась в том, что я представлял модальный vc до того, как UITabBarController был готов. Однако я чувствовал себя некомфортно, полагаясь на фиксированную задержку перед представлением контроллера представления (из моего тестирования мне нужно было использовать задержку 0,05-0,1 с в performSelector:withDelay:). Мое решение состоит в том, чтобы добавить блок, который вызывается методом UITabBarController viewDidAppear::

PRTabBarController.h:

@interface PRTabBarController : UITabBarController

@property (nonatomic, copy) void (^viewDidAppearBlock)(BOOL animated);

@end

PRTabBarController.m:

#import "PRTabBarController.h"

@implementation PRTabBarController

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if (self.viewDidAppearBlock) {
        self.viewDidAppearBlock(animated);
    }
}

@end

Сейчас в application:didFinishLaunchingWithOptions:

PRTabBarController *tabBarController = [[PRTabBarController alloc] init];

// UIWindow initialization, etc.

__weak typeof(tabBarController) weakTabBarController = tabBarController;
tabBarController.viewDidAppearBlock = ^(BOOL animated) {
    MyViewController *viewController = [MyViewController new];
    viewController.modalPresentationStyle = UIModalPresentationOverFullScreen;
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
    [weakTabBarController.tabBarController presentViewController:navigationController animated:NO completion:nil];
    weakTabBarController.viewDidAppearBlock = nil;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...