ARC 환경에서 UIPopoverController 사용법 참고 사항

ARC 환경에서 다음 코드를 사용하는 경우
UIViewController *viewTwo;
viewTwo = [[ViewTwo alloc] initWithNibName:@"ViewTwo" bundle:nil];

UIPopoverController *popover;
popover = [[UIPopoverController alloc] initWithContentViewController:viewTwo];  

[popover presentPopoverFromRect:[theButton bounds] 
                         inView:theButton 
       permittedArrowDirections:UIPopoverArrowDirectionLeft 
                       animated:NO];

결과는crash입니다. ARC 환경에서popover는 그 역할 영역에서 유효하고, 그 역할 영역이 나오면 컴파일러가 추가한release에서 메모리를 방출합니다.현재 popup은 디스플레이 기간이고 controller가 회수되었기 때문에crash가 나타납니다.xcode의console에서crash의reason에 설명이 있습니다.
따라서 ARC 환경에서 올바른 방법은 Popover의 생명 주기를 유지하는 것이다.popover를strong 형식의 구성원 변수나 속성으로 만듭니다.UIPopoverController dismiss 메시지가 표시되면 Popover = nil이렇게 하면 정상적으로 사용할 수 있다.예:
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
    popover = nil;
}

그리고 아이패드에서 UIImagePicker Controller를 사용할 때 주의해야 할 것은 이 아이패드의 소스타입이 UIImagePicker Controller SourceType Camera라면 [self]
presentModalViewController:vc animated:Yes];의 방법은 UIImagePicker Controller의view를 사진에 표시하는 것입니다. 만약 소스 Type이 UIImagePicker Controller SourceType SavedPhotos Album 사진이 선택한 UIImagePicker Controller라면 UIImagePicker Controller를 UIPopover Controller에 놓아야만 정상적으로 보일 수 있습니다.이것은 아이패드 아래의 규칙입니다.

좋은 웹페이지 즐겨찾기