Я пытаюсь взять мой класс "myEmail", и это будет мой класс "все методы электронной почты идут сюда", и любой другой класс, который будет отправлять электронную почту, будет использовать "myEmail".«myEmail» должен включать в себя среду MessageUI, а затем настраивать контроллер электронной почты для анимации на экране.
Сложность состоит в том, что я не понимаю, как использовать «myEmail», который использует «MFMailComposeViewController», в моем«Документы» просматриваются правильно.Когда я вызываю «sendEmail» в моем классе «Documents», он никогда не показывает слайд окна электронной почты в поле зрения.
Я понимаю, что могу вырезать myEmail в качестве посредника и использовать методы инфраструктуры MessageUI прямо в Documentsно я не хочу так поступать.
Если бы кто-нибудь мог указать, как я неправильно использую протоколы / делегаты, я был бы очень признателен.
Код в вопросе
Это мой класс myEmail
В myEmail.h:
#import <Foundation/Foundation.h>
#import <MessageUI/MessageUI.h>
@protocol myEmailDelegate <MFMailComposeViewControllerDelegate>
@required
-(void)sendEmail;
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error;
@end
@interface myEmail : MFMailComposeViewController {
id <myEmailDelegate> delegate;
}
@property(nonatomic,assign) id<MFMailComposeViewControllerDelegate> myEmailDelegate;
@end
В myEmail.m:
#import "myEmail.h"
#import "ConstructionDocuments.h"
@implementation myEmail
@synthesize myEmailDelegate;
-(void)sendEmail
{
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"mypdfdoc" ofType:@"pdf"];
NSData *myData = [NSData dataWithContentsOfFile:filePath];
MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = myEmailDelegate;
[controller setSubject:@"Email Example"];
[controller setMessageBody:@"Attached is pdf." isHTML:NO];
[controller addAttachmentData:myData mimeType:@"application/pdf" fileName:filePath];
[self presentModalViewController:controller animated:YES];
[controller release];
}
- (void)addAttachmentData:(NSData*)attachment mimeType:(NSString*)mimeType fileName:(NSString*)filename
{
}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
[self becomeFirstResponder];
[self dismissModalViewControllerAnimated:YES];
}
- (void) dealloc
{
[myEmailDelegate release];
[super dealloc];
}
@end
Этопредставление, в котором я буду использовать мой класс "myEmail"
В Documents.h:
#import <UIKit/UIKit.h>
#import "myEmail.h"
@interface Documents : UIViewController <myEmailDelegate> {
}
@property(nonatomic, assign) id<MFMailComposeViewControllerDelegate> myEmailDelegate;
- (IBAction)sendEmail;
@end
@protocol myEmailDelegate <myEmailDelegate>
- (void) sendEmail;
@end
В Documents.m:
- (IBAction)sendEmail
{
myEmail *mymyEmail = [[myEmail alloc] init];
[mymyEmail setmyEmailDelegate: myEmailDelegate];
[myEmailDelegate sendEmail];
}