MFMailComposeViewController:从父视图中关闭EXC-BAD-EXCESS时
我有UINavigationController/UITabBarController基本应用程序,所有工作正常,但MFMailComposeViewController让我发疯。我经历了几乎所有关于MFMailComposeViewController的堆栈溢出问题,并且尝试了它,但是当它试图从父视图中解雇它时,它给了我EXC-BAD-EXCESS。MFMailComposeViewController:从父视图中关闭EXC-BAD-EXCESS时
这是我用于MFMailComposeViewController的代码。
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
UIAlertView *alert;
if (result == MFMailComposeResultFailed) {
alert = [[UIAlertView alloc] initWithTitle:@"Message Failed!" message:@"Your email has failed to send" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[alert show];
[alert release];
}
[self dismissModalViewControllerAnimated:YES];
//[controller dismissModalViewControllerAnimated:YES];
//[[self parentViewController]dismissModalViewControllerAnimated:YES];
}
我不知道我的错误在哪里,或者这个邮件编辑器有什么问题。请提供一些指导。
更多code..here我是个提供代码...
-(void)mailsender
{
NSUserDefaults *invoiceautogenerator = [NSUserDefaults standardUserDefaults];
NSString *invoicestring = [invoiceautogenerator objectForKey:@"invoice"];
NSString *MemoString = [[NSUserDefaults standardUserDefaults]valueForKey:@"SALEMEMODETAIL"];
NSString *PassUniqeNumer = [[NSUserDefaults standardUserDefaults]valueForKey:@"UNIQUREFKEYDATA"];
MFMailComposeViewController *mail1 = [[[MFMailComposeViewController alloc] init]autorelease];
mail1.mailComposeDelegate = self;
[self databaseOpen];
NSString *str = [NSString stringWithFormat:@"Select EmailID from tblMercuryDetail"];
NSLog(@"str:%@",str);
NSArray *Query = [[NSArray alloc]init];
Query = [database executeQuery:str];
NSLog(@"Array DataL%@",Query);
NSString *Emailid = [NSString stringWithFormat:@"%@",[Query valueForKey:@"EmailID"]] ;
NSLog(@"Emailid:%@",Emailid);
Emailid = [Emailid stringByReplacingOccurrencesOfString:@"(" withString:@""];
Emailid = [Emailid stringByReplacingOccurrencesOfString:@")" withString:@""];
Emailid = [Emailid stringByReplacingOccurrencesOfString:@"\"" withString:@""];
Emailid = [Emailid stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"Emailid:%@",Emailid);
[Query release];
[database close];
UIImage *savedimage = [self loadImage:invoicestring];
NSData *myData = UIImagePNGRepresentation(savedimage);
[mail1 addAttachmentData:myData mimeType:@"image/png" fileName:@"sign.png"];
if ([MFMailComposeViewController canSendMail]) {
//Setting up the Subject, recipients, and message body.
[mail1 setToRecipients:[NSArray arrayWithObjects:Emailid,nil]];
[mail1 setSubject:@"Receipt"];
[mail1 setMessageBody:@"Message of email" isHTML:NO];
NSString *emailBody;
[self databaseOpen];
NSString *str = [NSString stringWithFormat:@"Select * from tblGiftTransaction where InvoiceNo = '%@' ",invoicestring];
NSArray *Arraydata = [[NSArray alloc]init];
Arraydata = [database executeQuery:str];
NSString *PurchaseAmt = [NSString stringWithFormat:@"%@",[Arraydata valueForKey:@"PurchaseAmt"]];
NSString *TransactionType = [NSString stringWithFormat:@"%@",[Arraydata valueForKey:@"TransactionType"]];
NSLog(@"==%@",Arraydata);
emailBody = [NSString stringWithFormat:@
"<br>Memo: </br> " "%@"
"<br>Ref Number: </br> ""%@"
"<br>Invoice No: </br> ""%@"
"<br>Purchase Amount: </br> ""$%@"
"<br>Transaction Type: </br> ""%@"
,MemoString,PassUniqeNumer,invoicestring,PurchaseAmt,TransactionType
];
NSLog(@"%@",emailBody);
[mail1 setMessageBody:emailBody isHTML:YES];
[[self parentViewController] presentModalViewController:mail1 animated:YES];
[database close];
}
//[mail release];
}
感谢。
我最近为我的项目做了这个,它工作正常。我不是%100肯定你的代码有什么问题,但是这里是我的代码,如果你想比较。请评论,如果你需要更多的帮助。
- (IBAction)EmailMe:(id)sender
{
//Open MFMail and set Preferences
UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
[mailComposer setMailComposeDelegate:self];
NSData *imageData = UIImageJPEGRepresentation(image,1.0);
if([MFMailComposeViewController canSendMail]){
[mailComposer setToRecipients:[NSArray arrayWithObjects:@"[email protected]", nil]];
[mailComposer setSubject: @"Subject"];
[mailComposer setMessageBody:@"Hello, \n\n how are you?" isHTML:NO];
//if you want to attach an image
[mailComposer addAttachmentData:imageData mimeType:@"image/jpeg" fileName:@"attachment.jpg"];
[mailComposer setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentModalViewController:mailComposer animated:YES];
}
}
//Dismiss MFmail
-(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
if(error)
{
UIAlertView *alert= [[UIAlertView alloc]
initWithTitle:@"Error %@"
message:[NSString stringWithFormat:@"Error %@", [error description]]
delegate:self
cancelButtonTitle:@"Dismiss"
otherButtonTitles:nil];
[alert show];
}
[self dismissModalViewControllerAnimated:YES];
}
这是工作的人...谢谢..我一定会加上+5 ..... – Nit 2012-04-03 07:49:40
感谢蕾,并且很乐意帮助 – 2012-04-03 14:04:49
这是我的工作代码来实现该方法。请注意,我将你的方法与我的方法进行了比较。它们看起来很相似。 您也可能希望在if语句之前构建并实例化整个警报对象之前,尝试清理您的项目。
- (void)mailComposeController:(MFMailComposeViewController*)controller
didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
switch (result)
{
case MFMailComposeResultCancelled:
emailMsg = @"email canceled";
break;
case MFMailComposeResultSaved:
emailMsg = @"email saved";
break;
case MFMailComposeResultSent:
emailMsg = @"email sent";
break;
case MFMailComposeResultFailed:
emailMsg = @"email failed";
break;
default:
emailMsg = @"email not sent";
break;
}
NSString *msgResult;
msgResult = emailMsg;
NSLog(@"msgResult %@", msgResult);
UIAlertView *avMsgResult = [[UIAlertView alloc] initWithTitle:@"Mail Status"
message:msgResult delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[avMsgResult show];
[avMsgResult release];
[self dismissModalViewControllerAnimated:YES];
}
它不工作...我已经尝试过了....但是谢谢你的回复... – Nit 2012-04-02 13:19:31
''[controller dismissModalViewControllerAnimated:YES];'应该工作 – beryllium 2012-04-02 13:08:22
请提供更多的代码细节。 – priyanka 2012-04-02 13:09:41
@beryllium:我用过它。但它不工作......谢谢.. – Nit 2012-04-02 13:10:17