나는 내 질문에 대한 대답을 찾았지만 그들 중 어느 것도 도움이되지 않았다고 확신합니다. 여기서 나는을 제시해야합니다 간단한 코드를 가지고 UIImagePickerController
내를 UIPopoverController
:
-(void)takePicture:(id)sender{
UIImagePickerController *picker=[[UIImagePickerController alloc] init];
picker.delegate=self;
picker.sourceType=UIImagePickerControllerSourceTypeCamera;
picker.allowsEditing=YES;
UIPopoverController *poc=[[UIPopoverController alloc]
initWithContentViewController:picker];
[poc presentPopoverFromBarButtonItem:bbItem
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:NO];
}
이제는 처음부터 [UIPopoveController dealloc]
… 오류가 발생하고 프로그램이 충돌합니다. ARC에 따라 유지, 해제 또는 자동 해제를 수행하지 않습니다. UIPopoverControllers
ARC의 혜택을받을 때 특별히 고려해야 할 사항이 있습니까?
답변
UIPopoverControllers는 항상 인스턴스 변수에 보관되어야합니다. 강력한 속성을 만드는 것이 좋습니다.
최신 정보:
iOS 8부터는 UIPopoverPresentationController
. 그러면 프레젠테이션 컨트롤러에서 관리하므로 팝 오버에 대한 참조를 유지할 필요가 없습니다.
코드 예제 (iPhone 및 iPad 모두에서 작동) :
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.allowsEditing = YES;
picker.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController* popoverPC = picker.popoverPresentationController;
popoverPC.barButtonItem = bbItem;
popoverPC.permittedArrowDirections = UIPopoverArrowDirectionAny;
[self presentViewController:picker animated:YES completion:nil];
답변
함수가 종료되면 팝 오버 컨트롤러에 대한 다른 참조가 없으므로 너무 일찍 할당 해제됩니다.
대신 수업 구성원으로 추가해보세요.
팀
답변
@ phix23이 대답 한 내용을 추가하고 다음과 같이 * poc 속성을 만듭니다.
@property (nonatomic, retain) IBOutlet UIPopoverController *poc;
그리고 변경
UIPopoverController *poc = [[UIPopoverController alloc]
initWithContentViewController:picker];
…에 대한
self.poc = [[UIPopoverController alloc]
initWithContentViewController:picker];