iOS 버전과 관련하여 나타나는 하위 뷰 메소드와 관련된 이상한 문제가 나타납니다.보기를 전환 할 때 iOS 특정 동작
부모보기 컨트롤러가있는 스왑 가능보기는 표시 할보기보다 두 개 있습니다. 기본적으로 로그인 할 때 계정보기로 스왑 된 로그인보기가 있으며 로그 아웃 할 때 다시 로그인으로 바뀝니다.
코드는 아주 간단합니다. 다음은 로그인 할 때 호출되는 부모보기 컨트롤러의 샘플 메소드입니다.
- (void) showAccountView:(BOOL)animated
{
if(self.accountController == nil)
self.accountController = [[[AccountViewController alloc] initWithNibName:@"AccountViewController" bundle:nil] autorelease];
[self.loginController viewWillDisappear:animated];
[self.accountController viewWillAppear:animated];
[self.loginController.view removeFromSuperview];
[self.view insertSubview:alertsController.view atIndex:0];
[self.loginController viewDidDisappear:animated];
[self.accountController viewDidAppear:animated];
}
로그인보기를 표시하는 것과 같은 또 다른 방법이 있습니다. 꽤 직설적 인. 문제는 viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear 메서드가 모두 iOS 4.3에서 한 번 호출되었지만 iOS 5.0 및 5.1에서는 두 번 호출된다는 것입니다.
예를 들어, 모든 iOS 버전에서 하위보기의 viewWillAppear은 상위보기에서 직접 호출 할 때 호출됩니다 (당연히). 그러나 iOS 5.0 및 5.1에서만 insertSubview 호출 중에 두 번째 호출됩니다. 내가 removeFromSuperview 및 insertSubview에 대한 호출을 제외한 모든 것을 제거, 그렇다면
그래서, 그것은 다음과 같습니다
- (void) showAccountView:(BOOL)animated
{
if(self.accountController == nil)
self.accountController = [[[AccountViewController alloc] initWithNibName:@"AccountViewController" bundle:nil] autorelease];
[self.loginController.view removeFromSuperview];
[self.view insertSubview:alertsController.view atIndex:0];
}
지금 5.0 및 5.1에서 하위 뷰 방법은 insertSubview 동안 한 번씩 전화를받을. 그러나, 그들은 전혀 호출되지 않기 때문에 4.3 이하에서 문제가 발생합니다.
서브 뷰 메소드가 호출되는지 확인하는 것과 관련된 몇 가지 게시물을 읽었지만 iOS에 따라 동작이 달라 보이는 것과 같은 것을 보지 못했습니다.
또한이 작업을 수행하는 유일한 방법은 런타임시 iOS 버전을 확인하고 iOS 4.3 용 하위 뷰 메소드를 직접 호출하고 5.0 및 5.1에서 호출하지 않는 것입니다.
아이디어가 있으십니까?
우선,'viewWill/Did'을 호출 할 필요가 없습니다 ... 둘째, 그들이 호출되지 않는다는 것을 어떻게 알 수 있습니까? – CodaFi
나는 그들에게 전화해서는 안되는 데 동의하지만 분명히 내가 4.3에서 그들 자신에게 전화를받지 않기 때문에 나는한다. 내가 설정 한 브레이크 포인트가 맞지 않기 때문에 호출되지 않는다고 말할 수 있습니다. 또한 뷰의 기능에서 호출되지 않는다는 것이 명백합니다. 사실, 나는 방금 내가 대답 한 것과 비슷한 문제를 논의하는 [이 게시물] (http://stackoverflow.com/questions/7890374/viewwillappear-not-getting-called-with-uisplitviewcontroller)을 발견했다. 그들은 iOS에서 버그라고 가정하고 동적 버전 확인을 사용하는 것이 좋습니다. – d512