1

iPhone 3.0의 in-app 메일을 사용하여 이미지를 보낼 수있는 부분이 있습니다. 카메라 롤에서 이미지를 선택하면 완벽하게 작동하지만 카메라에서 전자 메일로 이동하려고하면 (예 : UIImagePickerController에서 MFMailComposeViewController로) 응용 프로그램이 충돌합니다. iPhone 3.0에서 MessageUI를 사용하여 카메라에서 이미지를 보내려고하면 응용 프로그램이 충돌합니다.

카메라 실행하기위한 코드입니다

- (BOOL)startCameraPickerFromViewController:(UIViewController*)controller usingDelegate:(id<UIImagePickerControllerDelegate, UINavigationControllerDelegate>)delegateObject 
{ 
    if ((![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) || (delegateObject == nil) || (controller == nil)) 
     return NO; 
    UIImagePickerController* picker = [[UIImagePickerController alloc] init]; 
    picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    picker.delegate = delegateObject; 
    picker.allowsImageEditing = NO; 
    [controller presentModalViewController:picker animated:YES]; 
    return YES; 
} 

을 그리고 이것은 카메라와 함께 마무리 코드입니다 :

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo 
{ 
    NSLog(@"Called finish picking"); 
    self.imageForSending = theImage; 

    // NSData *imageData = UIImageJPEGRepresentation(image, 1); 

    [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 
    [(ChannelTwoAppDelegate *) [[UIApplication sharedApplication] delegate] recoverNavigationBar]; 

    [self performSelector:@selector(sendEmail) withObject:nil afterDelay:0.45]; 
    [picker release]; 
} 

그리고이 메일을 보내기위한 코드입니다

- (void) sendEmail { 

    [(ChannelTwoAppDelegate *) [[UIApplication sharedApplication] delegate] hideNavigationBar]; 
    if (![MFMailComposeViewController canSendMail]) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"שגיאה", @"") message:NSLocalizedString(@"לא ניתן לשלוח מייל ממכשיר זה", @"") 
                 delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
     [alert show]; 
     [alert release]; 
    } 
    else 
    { 
     MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; 
     controller.mailComposeDelegate = self; 
     [[controller navigationBar] setTintColor:[UIColor colorWithRed:120.0/255.0 green:0 blue:0 alpha:1.0]]; 
     NSData *imageData = UIImageJPEGRepresentation(imageForSending, 1); 
     [controller addAttachmentData:imageData mimeType:@"image/jpg" fileName:@"storyImage.jpg"]; 
     [controller setSubject:@""]; 
     [controller setToRecipients:[NSArray arrayWithObject:@""]]; 
     [self presentModalViewController:controller animated:YES]; 
     [controller release]; 
    } 

} 

이메일 주소와 제목이 덜 관련되어 있으므로 지워버 렸습니다.

전자 메일의 현재 모니터 뷰 컨트롤러에서 충돌이 발생합니다. 다시 -이 정확한 코드는 카메라 롤에서 이미지를 선택할 때 완벽하게 작동합니다 ...

Help? 나는 잠시 동안 이걸로 싸워 왔고 새로운 입력을 사용할 수있었습니다. 감사합니다.

답변

0

안녕하세요 누구에게나 내 자신의 질문에 대한 답변을 찾았습니다. 두 개의 모달보기 컨트롤러의 프리젠 테이션 사이에 타이밍 문제가 발생했습니다.

기본적으로이 문제는 이미 알고 있지만 오래 기다렸습니다. 대기 시간은 카메라 롤에서 이미지를 선택하기에 충분했지만 카메라에서 돌아올만큼 길지는 않았습니다.

[self performSelector : @selector (sendEmail) withObject : nil afterDelay : 0.45];

:

로 변경 [자기 performSelector : @selector (sendEmail) withObject : afterDelay 전무 : 1.0];

또한 사용자에게 뭔가 발생하고 있음을 나타 내기 위해 UIActivityIndicator를 추가했습니다.

해피 코딩!