exc_bad_access dismissModalViewControllerAnimated - PullRequest
1 голос
/ 31 августа 2011

Я новичок в iPhone SDK dev, и я не англичанин, поэтому я извиняюсь за мой уровень.

Вот моя проблема: у меня есть tabBarcontroller, с 3 элементами, каждый из которых имеетnavBarcontroller

[self.loginViewController release];
[self setLoginViewController:[[LoginViewController alloc] init]];
[[self loginViewController] setDelegate:self];
[[self loginViewController] isLoggued];

self.tabBarController = [[UITabBarController alloc] init];

_FirstViewController = [[[FirstViewController alloc] init] autorelease];
_FirstViewController.title = @"title 1";

UINavigationController* navController1 = [[[UINavigationController alloc]
                                           initWithRootViewController:_FirstViewController] autorelease];

_SecondViewController = [[[SecondViewController alloc] init] autorelease];
_SecondViewController.title = @"title 2";

UINavigationController* navController2 = [[[UINavigationController alloc]
                                           initWithRootViewController:_SecondViewController] autorelease];

_ThirdViewController = [[[_ThirdViewController alloc] init] autorelease];
_ThirdViewController.title = @"title 3";

UINavigationController* navController3 = [[[UINavigationController alloc]
                                           initWithRootViewController:_ThirdViewController] autorelease];

self.tabBarController.viewControllers = [NSArray arrayWithObjects:navController1, navController2, navController3, nil];
[self.window addSubview:self.tabBarController.view];
// adds the tab bar's view property to the window
[self.window makeKeyAndVisible];

[self.tabBarController release];

if ([self respondsToSelector:@selector(loginViewControllerLogout:)]) {
    [self performSelector:@selector(loginViewControllerLogout:) withObject:[self loginViewController]];
}

return YES;

Вот этот селектор

-(void)loginViewControllerLogout:(LoginViewController *)loginViewController {

if (![self.loginViewController logguedIn])
    [self.tabBarController presentModalViewController:self.loginViewController animated:YES];
}

И когда я вхожу в систему, я вызываю:

-(void)loginViewControllerDidFinish:(LoginViewController *)loginViewController {
    [self.loginViewController dismissModalViewControllerAnimated:YES];
}

Этот фрагмент кода работает, когдаприложение запускается впервые.LoginViewController отображается> успешный вход в систему> LoginViewcontroller отклоняется> FirstViewController отображается.Но если я перейду к третьему элементу ViewViewController, щелкните по выходу из системы: селектор LoginViewControllerLogout вызывается> LoginViewController отображается> Вход успешно> Сбой в dismissModal.

Нет стека ошибок, только ошибка exc_bad_access.Для loginViewController существует более 1 сохранения.

Заранее спасибо

РЕДАКТИРОВАТЬ: все функции находятся в AppDelegate

Ответы [ 2 ]

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

EXC_BAD_ACCESS означает, что вы пытаетесь получить доступ к тому, что уже выпущено. Я думаю, вам не нужно перезванивать на свой loginViewController, чтобы просто отклонить модальное представление. Просто отпустите текущий вид, и ваш другой вид будет там ждать вас.

[self.view dismissModalViewControllerAnimated:YES];
0 голосов
/ 31 августа 2011

вместо

[self.tabBarController presentModalViewController:self.loginViewController animated:YES];

попробуйте это

[self presentModalViewController:self.loginViewController animated:YES];

это должно работать, когда вы представляете модальное окно, а не панель вкладок.

или

[self presentModalViewController:loginViewController animated:YES];
...