여러 개의 모달보기를 순서대로 표시하고 싶습니다 (예 : 이미지 선택기에서 그림을 선택한 후 표시 확인 페이지 표시). 내 문제는 해산 애니메이션과 후속 단계에서 지연없이 항상 EXC_BAD_ACCESS
으로 앱이 충돌한다는 것입니다.여러 개의 모달보기 전환 충돌 응용 프로그램
CoreAnimation
은 두 전환을 구분하지 않으며 처음 전환이 끝났는지 여부를 제대로 감지하지 못한다고 가정합니다.
내 작업은 지금까지 문제를 해결하는 것으로 보이는 1 섹션 지연을 소개하는 것입니다. 그러나 이것은 코드가 약간 깨지기 쉬운 것으로 생각합니다. 다른 해결 방법이 있습니까?
UIKit의 버그입니까? 버그 보고서를 제출해야합니까?
샘플 코드 여기
가 충돌 재현 간단한 경우입니다 :
메인 컨트롤러의 구현으로 다음의 클래스와 함께 새로운보기 기반 프로젝트 작성을
이미지 픽커보기가 표시되면 '취소'를 누르십시오.
예상되는 동작 : 이후 호출로 인해 피커 뷰가 닫히고 다시 제시됩니다 (viewDidAppear
).
실제 동작 : 아래에 표시된 스택 추적과 충돌합니다.
코드 :
#import "SampleViewController.h"
@implementation SampleViewController
- (void)showModal {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
[self presentModalViewController:picker animated:YES];
// [picker release];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self showModal]; // this line crashes the app
// the following works as desired
// [self performSelector:@selector(showModal) withObject:nil afterDelay:1];
}
@end
충돌 스택 추적 :
#0 0x30b43212 in -[UIWindowController transitionViewDidComplete:fromView:toView:] #1 0x3095828e in -[UITransitionView notifyDidCompleteTransition:] #2 0x3091af0d in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] #3 0x3091ad7c in -[UIViewAnimationState animationDidStop:finished:] #4 0x00b54331 in run_animation_callbacks #5 0x00b54109 in CA::timer_callback #6 0x302454a0 in CFRunLoopRunSpecific #7 0x30244628 in CFRunLoopRunInMode #8 0x32044c31 in GSEventRunModal #9 0x32044cf6 in GSEventRun #10 0x309021ee in UIApplicationMain #11 0x00002794 in main at main.m:14
지연을 0.0으로 사용하면 문제가 해결됩니다! 감사! – notnoop
+1은 'beginIgnoringInteractionEvents' 제안입니다. 전에는 전혀 몰랐습니다. – chakrit