Кто-то опубликовал похожий вопрос на этот вопрос без разрешения, но также без примера кода. Итак, я думал, что опубликую свою проблему здесь подробно.
У меня есть игра с несколькими режимами игры, каждый из которых имеет несколько вариантов. После того, как вы поиграете с различными дизайнами, кажется, что лучше всего поместить их в 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;