Почему не работает переключение вкладок в tabView после представления и удаления модального в Objective C - PullRequest
0 голосов
/ 28 октября 2011

Я сделал простое приложение, которое состоит из главного окна с навигацией по вкладкам, где каждая вкладка имеет свой собственный контроллер навигации.

Я могу переключать вкладки и видеть первый или второй вид в зависимости от выбранной вкладки.

Теперь я добавляю новое окно (StartupView) со своим собственным контроллером навигации (startupNavigationController).

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

@implementation NavigationCrapAppDelegate

@synthesize window=_window;
@synthesize tabBarController=_tabBarController;
@synthesize firstTabNavigationController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{  

    [self.window addSubview:self.tabBarController.view];
    [self.window makeKeyAndVisible];

    StartupViewController *sv = [[StartupViewController alloc] init];     

    [[firstTabNavigationController topViewController] presentModalViewController:sv animated:NO];

    [[firstTabNavigationController topViewController] dismissModalViewControllerAnimated:YES];

    [sv release];

    return YES;
}

Сразу после его показа я его снова удалю (для простоты, обычно этопроизойдет после события).

Теперь приложение запускается, показывает и скрывает startupWindow и снова показывает основное основное окно с tabnavigation.Однако есть одно отличие.Перед добавлением и удалением модального окна запуска я смог переключиться на другую вкладку, теперь приложение будет прерываться при переключении вкладок.

Я получаю сообщение «EXC_BAD_ACCESS» в main.c.Я понятия не имею, к чему он пытается получить доступ (что могло быть случайно выпущено за это время?).

Снимок экрана дерева проекта: http://www.roderik.net/xcode-tabs.png

Я получаю следующую обратную трассировку (с командой bt):

#0  0x00f2809f in objc_msgSend ()
#1  0x0290c1a7 in WebCore::failedToStartServiceErrorMessage ()
#2  0x0003d695 in +[UIWindow _hitTestToPoint:pathIndex:forEvent:] ()
#3  0x0001d709 in _UIApplicationHandleEvent ()
#4  0x00ffb992 in PurpleEventCallback ()
#5  0x00da3944 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#6  0x00d03cf7 in __CFRunLoopDoSource1 ()
#7  0x00d00f83 in __CFRunLoopRun ()
#8  0x00d00840 in CFRunLoopRunSpecific ()
#9  0x00d00761 in CFRunLoopRunInMode ()
#10 0x00ffa1c4 in GSEventRunModal ()
#11 0x00ffa289 in GSEventRun ()
#12 0x00022c93 in UIApplicationMain ()
#13 0x00001e89 in main (argc=1, argv=0xbffff040) at main.m:14

Файлы проекта: http://www.roderik.net/NavigationCrap.zip

1 Ответ

0 голосов
/ 29 октября 2011

Ваша проблема, вероятно, в том, что вы пытаетесь закрыть контроллер представления еще до его отрисовки. Ничего не прорисовывается до тех пор, пока код не попадет в основной цикл обработки событий, то есть после выхода из вашего метода. Попробуйте позвонить на ваш вызов отклонить, используя

[self performSelection:@selection(<myDismissMethod>) withObject:nil afterDelay:2.5];

Где все, что делает myDismissmethod, вызывает ваш dismissModalViewControllerAnimated

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