IT story

"애플리케이션이 활성 컨트롤러를 모달로 제시하려고했습니다"?

hot-time 2020. 9. 1. 08:02
반응형

"애플리케이션이 활성 컨트롤러를 모달로 제시하려고했습니다"?


방금 NSInvalidArgumentException전에이 작업을 수행하지 않았던 앱에서이 메시지와 함께 충돌 이 발생했습니다.

응용 프로그램이 활성 컨트롤러 UITabBarController : 0x83d7f00을 모달로 표시하려고했습니다.

나는이 UITabBarController난에서 작성한 AppDelegate및 그것을 배열을 줄을 UIViewControllers.

그중 하나를 탭하면 모달로 제시하고 싶습니다. 위임 메서드를 구현하여 수행했습니다.

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

해당 뷰 컨트롤러가 모달로 표시하려는 클래스이면 NO를 반환하고

[tabBarController presentModalViewController:viewController animated:YES];

그리고 이제 그 오류가 발생합니다. 이는 다른 곳에서 활성화 된 뷰 컨트롤러를 모달로 표시 할 수 없음을 의미하는 것 같습니다 (탭바에서 ...). XCode 4.2 Developer Preview 7에 있다고 말해야합니다. 이것은 iOS 5입니다 (NDA에 대해 알고 있지만 금지 된 세부 정보를 제공하지 않는 것 같습니다). 현재 iOS4 SDK에 대해 컴파일이 충돌하는지 테스트 할 XCode 설치가 없지만 거의 완전히 그렇지 않습니다.

이 문제를 경험 한 사람이 있는지 또는 제안 사항이 있는지 물어보고 싶었습니다.


다음과 같이 인스턴스화 된 세 개의 뷰 컨트롤러가 있다고 가정합니다.

UIViewController* vc1 = [[UIViewController alloc] init];
UIViewController* vc2 = [[UIViewController alloc] init];
UIViewController* vc3 = [[UIViewController alloc] init];

다음과 같이 탭 표시 줄에 추가했습니다.

UITabBarController* tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, vc3, nil]];

이제 다음과 같이하려고합니다.

[tabBarController presentModalViewController:vc3];

Tab Bar Controller에는 사용자가 지정한 뷰 컨트롤러에 대한 죽음 그립이 있기 때문에 오류가 발생합니다. 탭 표시 줄의 뷰 컨트롤러 배열에 추가 할 수 없거나 모달로 표시 할 수 없습니다.

Apple은 사용자가 UI 요소를 특정 방식으로 취급하기를 기대합니다. 이것은 아마도 휴먼 인터페이스 가이드 라인 어딘가에 "우리는 당신이 이것을하기를 원하지 않기 때문에 이것을하지 마십시오"라고 묻혀있을 것입니다.


나도 같은 문제가있어. 해고 직후 뷰 컨트롤러를 제시하려고합니다.

[self dismissModalViewControllerAnimated:YES];

애니메이션없이 시도하면 완벽하게 작동하므로 문제는 컨트롤러가 여전히 살아 있다는 것입니다. 가장 좋은 해결책은 dismissViewControllerAnimated:completion:iOS5 에서 사용하는 것 같아요


제 경우에는 다른 뷰 컨트롤러에서 viewController (TabBarViewController에 viewController의 참조가 있음)를 제시하려고 시도했지만 위의 메시지와 함께 충돌했습니다. 그 경우에는 제시를 피하고 사용하실 수 있습니다

viewController.isBeingPresented

!viewController.isBeingPresented {
          // Present your ViewController only if its not present to the user currently.
}

누군가를 도울 수 있습니다.


나는 같은 문제가 있었다. 이 코드를 시도 할 수 있습니다.

[tabBarController setSelectedIndex:1];
[self dismissModalViewControllerAnimated:YES];

그냥 제거

[tabBarController presentModalViewController:viewController animated:YES];

그리고 유지

[self dismissModalViewControllerAnimated:YES];

참고 URL : https://stackoverflow.com/questions/7429014/application-tried-to-present-modally-an-active-controller

반응형