이 문제에 관해 많은 질문을 읽었지만 제대로 작동하지 않는 이유는 알지 못합니다.iOS Objective-C에서 로그인/로그 아웃 후 rootViewController 변경
기본적으로 사용자가 로그인하거나 로그 아웃 한 후 루트 컨트롤러를 변경하려고합니다. 스토리 보드도 사용하고 있습니다. 내 문제는 SILoginViewController
dealloc의 함수는 절대로 호출되지 않습니다.이 컨트롤러에서는 Notification을 보내고 관찰자는 제거되지 않으므로 모든 것을 엉망으로 만들고 몇 가지 "로그인/로그 아웃"후에 몇 가지 알림을받습니다.
내 AppDelegate에이 :
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self.window setFrame:[[UIScreen mainScreen] bounds]];
BOOL isLoggedIn = [[SIUser aUser] isLoggedIn]; // from your server response
NSString *storyboardId = isLoggedIn ? @"rootViewController" : @"navVcForLogin";
self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:storyboardId];
return YES;
}
사용자가 로그인하지 않은 경우 그 성공 신고서 전송하는 프로세스, 여기에 나는 rootViewController 변경하려는 핸들러 :
- (void)loginSuccessHandler:(id)sender
{
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
SIRootViewController * vc = [sb instantiateViewControllerWithIdentifier:@"rootViewController"];
[UIApplication sharedApplication].keyWindow.rootViewController = vc;
}
은 이것은 로그 아웃과 동일한 프로세스이며 다음은 알림 처리기입니다.
- (void)logoutHandler:(id)sender
{
UIWindow *myWindow = [(SIAppDelegate *)[[UIApplication sharedApplication] delegate] window];
SILoginViewController * vc = [sb instantiateViewControllerWithIdentifier:@"navVcForLogin"];
[UIApplication sharedApplication].keyWindow.rootViewController = vc;
}
가장 쉬운 직접 스토리 보드를 보여하는 것입니다
는스토리 보드의 구현은 수 이상한 것 같다하지만 난 자신의 스토리 보드 구현을 다음
https://github.com/romaonthego/RESideMenu을 사용하고 있습니다.
것은 SILoginViewController
입니다. dealloc의 메소드는 호출되지 않습니다.
하지만 잘 작동하는 방식으로 보면 응용 프로그램을 실행할 때 동작이 좋지만 나중에는 엉망이 될 것이라고 확신합니다.
UPDATE
는 그리고 나는 그것이 일반적인 행동하지만 루트 뷰 컨트롤러가 변경 될 때 어떤 변화가없는 새로운 컨트롤러가 표시되어 정말 짧은 시간 동안 검은 화면이있는 것 같아요. 내 AppDelegate.m
- (void)changeRootViewController:(UIViewController*)newRootViewController
{
if (!self.window.rootViewController) {
self.window.rootViewController = newRootViewController;
return;
}
UIView *snapShot = [self.window snapshotViewAfterScreenUpdates:YES];
[newRootViewController.view addSubview:snapShot];
self.window.rootViewController = newRootViewController;
[UIView animateWithDuration:0.3 animations:^{
snapShot.layer.opacity = 0;
snapShot.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1.5);
} completion:^(BOOL finished) {
[snapShot removeFromSuperview];
}];
}
RootViewController Switch Transition Animation
이 아마 종류의 중복 질문에서 그러나 나는이 문제를 알아 내기 위해 시간을 보냈다 :
검은 색 화면이 사용하여 해결.
Google 시스템에서 transitionViewController를 조회합니다. 그것이 내가 이것을 할 수있는 방법입니다. rootViewController를 새로운 것으로 전환하십시오.다른 몇 가지 호출이 작동하도록하려면 필요한 데 콜이 호출되어야합니다. –
나는이 대답의 해결책을 시도했다. : http://stackoverflow.com/questions/7703806/rootviewcontroller-switch-transition-animation, 나의 전이 문제를 해결 하나,'SILoginViewController' 할당 해제 문제는 해결하지 않는다. – BoilingLime
찾은 해결책이 다른 방법을 구현하지 않는 것 같습니다. 나는 내 컴퓨터에 도착했을 때 다시 게시 할 것이다. –