Удаление UITabBarController - PullRequest
       20

Удаление UITabBarController

0 голосов
/ 12 февраля 2010

Кто-то опубликовал похожий вопрос на этот вопрос без разрешения, но также без примера кода. Итак, я думал, что опубликую свою проблему здесь подробно.

У меня есть игра с несколькими режимами игры, каждый из которых имеет несколько вариантов. После того, как вы поиграете с различными дизайнами, кажется, что лучше всего поместить их в UITabBarController с тремя вкладками, по одной для каждого класса игр. Я создал новый UIVIewController, который загружается из экрана главного меню (заменяет главный экран) и инициализирует UITabBarController следующим образом:

barController = [[UITabBarController alloc] init];

Games1 *vc1 = [[[Games1 alloc] initWithNibName:@"Games1" bundle:nil] autorelease];
Games2 *vc2 = [[[Games2 alloc] initWithNibName:@"Games2" bundle:nil] autorelease];
Games3 *vc3 = [[[Games3 alloc] initWithNibName:@"Games3" bundle:nil] autorelease];

NSArray* controllers = [NSArray arrayWithObjects:vc3, vc1, vc2, nil];
barController.viewControllers = controllers;
[self.view addSubview:barController.view];

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

- (void)dealloc {
    printf("Games released: barController: %d\n", [barController retainCount]);
    [barController.view removeFromSuperview];
    barController.viewControllers = 0;
    [barController release];
    barController = 0;
    [super dealloc];
}

У меня проблема в том, что при повороте устройства происходит сбой. Если я запускаю игровой режим прямо с главного экрана и вращаюсь, не вылетает. Я проверил, что все освобождается, и мой счет удержания на контроллере бара равен 1. Любые предложения о том, как устранить этот сбой? Спасибо!

[Редактировать] Немного больше информации:

BarController определяется как:

IBOutlet UITabBarController *barController;

с:

@property (nonatomic, retain) IBOutlet UITabBarController *barController;

Ответы [ 2 ]

1 голос
/ 16 февраля 2010

В конечном итоге проблема была связана только с UITabBarController. Я добавлял и удалял UIViewControllers непосредственно в окно моего приложения, которое, как было показано, вызывает проблемы в других местах. Добавление мастер-файла UIViewController / UIView и только добавление и удаление из этого исправляет все, хотя, возможно, сработал и автоматический выпуск вместо выпуска. Смотрите обсуждение здесь:

Просмотр контроллера, отправляющего сообщение, даже если оно было освобождено

UITabBarController просто вызывал проблему намного быстрее и очевиднее.

0 голосов
/ 12 февраля 2010

Не делай этого:

barController.viewControllers = 0;

В -dealloc вы должны только удалить представление UITabBarController из его суперпредставления и освободить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...