반응형

iOS 4까지는 아래의 코드로 호출 된 경우 아무 문제없이 동작합니다.

-(IBAtion) callPhotoAlbum
{
  [self callPickerContoller:self delegate:self];
}

-(BOOL) callPickerController:(UIViewControler*)c delegate:(id<UIImagePickerControllerDelegate, UINavigationControllerDelegate>) d
{
  UIImagePickerController* picker = [[UIImagePickerController alloc]init];
  picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotoAlbum];
  picker.delegate = d;
  [c presentModalViewController:picker animate:YES];
  return YES;
}

- (void) imagePickerController: (UIImagePicekrController*) picker didFinishPickingMediaWithInfo:(NSDictionary*) info
{
   // TODO Something...
  [[picker parentViewController] dismissModalViewControllerAnimated:YES];
}

iOS 5에서는 위 코드로 호출은 가능하나 사진선택 모달뷰가 dismiss되지 않습니다.
ARC와 관련이 있는것인가? 라고 생각해 봤지만, 글쎄요...
혹시나 해서 picker를 전역변수로 빼서 동기화해서 사용해보았지만 그래도 되지 않습니다.

여러가지 방법으로 테스트와 디버깅 분석 해본결과
다른 메서드로 핸들(self)을 넘겨줄 때 잃어버리는 것 같습니다.

따라서 아래와 같이 변경하시면 동작합니다.

-(IBAtion) callPhotoAlbum
{
  [self callPickerContoller];
}

-(BOOL) callPickerController
{
  UIImagePickerController* picker = [[UIImagePickerController alloc]init];
  picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotoAlbum];
  picker.delegate = self;
  [self presentModalViewController:picker animate:YES];
  return YES;
}

- (void) imagePickerController: (UIImagePicekrController*) picker didFinishPickingMediaWithInfo:(NSDictionary*) info
{
  // TODO Something...
  [self dismissModalViewControllerAnimated:YES];
}

핸들을 잃는다...
MFC에서 특정 이벤트에서 가끔 보던 증상이네요
물론 MFC야 핸들을 직접 찾아 넘겨주거나 theApp를 전역화 해서 사용하는 꼼수들을 부렸지만(c/c++의 범위니 꼼수도 능력일지도)
self자체를 넘겨줌에도 불구하고 잃어버리게 되는군요. 추후 수정이 될지 모르니 위와같은 방식을 이용하셔야 할 것 같습니다.
흠... 다른 프레임웤에서 잃어버린 10년을 되찾은 느낌이군요.

도움이 되셨길 빕니다.
반응형

+ Recent posts