2015-10-08 5 views
0

Контроллер исходного представления в моем приложении - это UITabBarController, который отображается для зарегистрированных пользователей.Objective-C: Modal Segues и Release View Controller

Для новых пользователей, однако, мое приложение делегат будет указать их на контроллер Логин/вид регистрации первого:

// New user, show login 
self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"]; 

Когда пользователь завершил входа/регистрации, я затем отправить пользователю в TabBar как таковой:

// Login done, go to main view 
[self performSegueWithIdentifier:@"userLoginToMainSeg" sender:self]; 

Однако, делая это так, то LoginViewController не освобождается (dealloc не называется).

Может кто-нибудь объяснить ошибку в моей логике здесь?

+0

Что такое segue 'userLoginToMainSeg'? –

+0

@ TamásZahola это модальная серия –

ответ

0

Ваш модальный переход в основном делает:

[loginViewController presentViewController:mainViewController animated:YES completion: ...]; 

Что это означает, что mainViewController становится loginViewController s presentedViewController:

loginViewController.presentedViewController == mainViewController 
mainViewController.presentingViewController == loginViewController 

Когда вы presenting a view controller контроллер вид Предъявление остается в представлении иерархии контроллера, чтобы вы могли позже вернуться по телефону:

[loginViewController dismissViewControllerAnimated: ...]; 

Так что это нормально, что loginViewController не выпущен, так как он все еще находится в окне rootViewController. Только loginViewController затрудняется представленным mainViewController.

Если вы хотите искоренить loginViewController, вы можете установить window.rootViewController напрямую, но это не будет анимировать переход. Вы можете достичь анимации by messing around the view controllers' views, но это своего рода за пределами официально санкционированной территории ...

ИМО чистое решение было бы реализовать основную container view controller что бы ваша функция окна rootViewController, и которые могли бы организовать переход между loginViewController и mainViewController оживив их взгляды, а затем выбросив loginViewController. Это будет своего рода примитивный навигационный контроллер без навигационной панели и навигационного стека - просто заменив текущий контроллер представления новым и отбросив первый.

+0

благодарю вас за ответ. Есть ли способ освободить loginviewcontroller после того, как я представляю tabbarcontroller? Будет ли настройка tabbarcontroller, как rootviewcontroller, сделать трюк? –

+0

Это будет сделано, но не будет анимировать. Я обновил ответ с помощью некоторых возможных решений. –

Смежные вопросы