1

나는 UIViewControllers (예 : VC_AVC_B)의 몇 가지 간단한 응용 프로그램을 가지고 있습니다. 모든 화면에는 다른 화면으로 전환 할 수있는 버튼이 있습니다 (UINavigation 사용 안 함).보기 컨트롤러를 올바르게 표시하는 방법은 무엇입니까?

응용 프로그램이 만료되면 또 다른보기 컨트롤러 (VC_N - 현재 활성화 된 화면과 상관없이)를 표시해야합니다.

'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from 
<VC_A: 0x2021e0> to <VC_N: 0xf84b970> while a transition is already in progress. 

Wait for viewDidAppear/viewDidDisappear to know the current transition has completed' 

같은 동작을 구현하는 적절한 방법은 무엇입니까 :

문제는 때때로 응용 프로그램이 발생한다는 것입니다?

답변

1

A. 이전 모달 방법 대신 세 가지 컨트롤러를 모두 표시하려면 UIViewController의 새 presentViewController : animated : completion을 사용하십시오.

B. 부울 플래그를 만들고이를 NO로 초기화하십시오.

C. 어떤 뷰 컨트롤러 프리젠 테이션을하기 전에이 플래그를 확인하십시오. YES이면 NO로 설정하십시오. 그런 다음 VC를 제시하십시오. 완료 블록에서 플래그를 다시 YES로 설정하십시오.

D. VC_A 또는 VC_B 중 초기보기 컨트롤러가있는 경우 앱에서이 플래그를 무시해야합니다.

이것은 하나의 버튼이 눌려 지거나 이미 뷰 컨트롤러가 전환 상태에있는 동안 로컬 알림이 만료 된 경우 새 VC가 표시되지 않는다는 것입니다. 필요하다면이 논리를 개선하여 제시 할 수 있습니다.

+0

감사합니다. 이것은 "기본 제공"솔루션이 있는지 궁금해하고 있습니다. – Asahi

+0

여기에 같은 솔루션이 있는지 다른 사람이 볼 수 있습니다. – user523234

0

타이머가 만료되면 해당 타이머 처리기 메서드에서보기 표시를 호출하지 마십시오. 대신 뷰 프리젠 테이션 호출을 별도의 메소드에 넣고 [self performSelector : withObject : afterDelay :]를 사용하여 해당 메소드를 호출하십시오 (지연 시간은 0.1 일 수 있음) 현재 전환이 완료되면 뷰 프리젠 테이션이 완료되어야합니다 ..

+0

감사합니다. 그동안 다른 전환이 시작되면 어떻게 될까요? – Asahi