2012-03-18 2 views
1

내 앱에는 많은 NIB 중 하나에서 "문의하기"를 클릭 할 때마다 actionSheet를 표시하는 공통 클래스가 있습니다.IOS5 : NSObject 클래스에서 이메일을 호출하는 방법

사용자가 actionSheet 팝업에서 "Email Us"를 선택하면 동일한 공용 클래스에서 전자 메일 메서드를 호출하고 싶습니다. 조사 후 나는이 구현 :

-(void)SendEmail { 

rootViewController = (UIViewController*) 
[(AppDelegate*)[[UIApplication sharedApplication] delegate] viewController]; 

// compose 
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; 
controller.mailComposeDelegate = rootViewController; 


//format message 
NSArray *recipientsArray = [[NSArray alloc] initWithObjects:@"[email protected]", nil]; 
[controller setToRecipients:recipientsArray]; 
[controller setSubject:[NSString stringWithFormat:@"A question about %@",string]]; 
[controller setMessageBody:outputMutString isHTML:YES]; 

//send 
if (controller) [rootViewController presentModalViewController:controller animated:YES]; 

} 

// didFinishWithResult

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error;{ 

if (result == MFMailComposeResultSent) { 
} 
[rootViewController dismissModalViewControllerAnimated:YES]; 
} 

이것은 그러나 새 이메일, 시작됩니다 : 모달 뷰가 그대로

  1. 가 didFinishWithResult이 작동하지 않습니다 이메일을 보내거나 취소 버튼을 누른 후에도 제거되지 않았습니다.

  2. 이 경고 메시지가 나타납니다 : 호환되지 않는 유형의 'id'에 할당 'UIViewController * __ strong' controller.mailComposeDelegate = rootViewController;

감사합니다.

답변

2

rootViewController을 대표자 MFMailComposeViewControllerDelegate으로 설정해야합니다.

@interface RootViewController : UIViewController <MFMailComposeViewControllerDelegate> 
+0

안녕 Inafziger : 그것은 비슷한 모양 당신의 RootViewController.h 파일에

는 인터페이스 선언에 그 부분을 추가합니다. 별도의 "RootViewController"클래스를 만들지 않았습니다. 공통 클래스에 "UIViewController * rootViewController"라는 객체를 만들었습니다. 내가 가지고있는 것을 사용할 수있는 방법이 있는가, 아니면 별도의 클래스를 사용하는 유일한 해결책인지 (너무 복잡해 보임). – Jeremy

+0

죄송합니다. 나는 그것을 보지 못했습니다. 이 코드가있는 공통 클래스에서 동일한 작업을 수행 할 수 있습니다. 컨트롤러 만 변경하십시오. mailCompose를 self로 지우십시오. – lnafziger

+0

이 기능을 사용하셨습니까? – lnafziger