ViewController에서 Session.isOpen 이 잘 안됩니다

안녕하세요?
ViewController를 다음과 같은 순서대로 띄웠습니다
MainViewController → AViewController → BViewController
MainViewController 과 AViewController 에서는 정상적으로 호출이 되는데 BViewController에서는 동작하지 않네요
버튼을 처음 누르면 아예 openWithCompletionHandler도 호출이 되지 않고 두번째는 isOpen false로 나옵니다.
test 프로젝트 첨부합니다.

KakaoSample2.zip (2.4 MB)

@anon54026900

해당 처리는 샘플 소스를 참고하셔야 할 것 같습니다.

BViewController 에서

- (void)onTouchButton1 {
NSLog(@"0");
if ([[KOSession sharedSession] isOpen]) {
    NSLog(@"1");
}
else {
    [[KOSession sharedSession] close];

    KOSession *session = [KOSession sharedSession]; // 추가        
    session.presentingViewController = self;                   // 추가
    [[KOSession sharedSession] openWithCompletionHandler:^(NSError *error) {
        session.presentingViewController = nil;                 // 추가
        NSLog(@"2");
        if ([[KOSession sharedSession] isOpen]) {
            NSLog(@"3");
        }
        else {
            NSLog(@"4:%@", error.localizedDescription);
        }
    }];
}

위와 같이 처리하시면 다음 프로세스가 진행될 것 같습니다.

1.0.42까지는 없었는데
session.presentingViewController = self
이게 새로 추가 됐나 보군요…
감사합니다

근데 첫번째 두번째 뷰컨트롤러에서는 없어도 잘 동작하는데 왜그런건가요?

@kakao20

해당 부분은 저희 SDK 내부의 구현 이슈로 추가된 부분입니다.
첫번째/두번째 뷰컨트롤러는 저희 SDK 와 관련없이 동작하기 때문입니다.

이해가 안가는데요…
첫번째/두번째 뷰컨트롤러에서도 똑같이 kakaosdk를 import해서
위의 코드 똑같이 호출해 주는데 어떻게 kakaosdk와 관련없이 동작 한다는 것인가요?
첨부된 테스트프로젝트의 두번째 뷰컨트롤러에는 kakaosdk 코드가 없긴 합니다.
근데 제가 코드 복사해서 넣어서 첫번째/두번째/세번째 모두 똑같이 실행 시켜 봤었거든요…
근데 세번째만 동작하지 않았던 문제 였습니다.

@kakao20

음 제가 설명이 부족했나 봅니다.

저희 SDK 내부에서는 특정 상황에서 로그인 화면을 어느 뷰에 붙여야 할지 정확한 판단을 해야 하는데요.
사용자가 로그인 화면을 ContainerController 라고 불리는 녀석에 붙일지 아니면 kakao20 님처럼 단순히 presentation 방식으로 붙일지는 사용자의 맘이기 때문에 이 부분의 정확한 판단이 어렵습니다.

이 부분을 판단하기 위해서 내부적으로 처리를 하긴 했지만 완벽하진 않기 때문에
현재는 session.presentingViewController 라는 힌트를 둬서 사용자가 명시한 ViewController 의 view 에 로그인 화면을 붙있을 수 있도록 하고 있습니다.

첫번째/두번째 컨트롤러에서는 저희가 구현한 로직에 의해서 로그인 화면이 붙어야 할 view 를 정확히 판별했다면
세번째 컨트롤러는 그렇지 못한 것으로 보입니다.