Xcode 4.4警告:案例值不在枚举类型'MessageComposeResult'(又名'enum MessageComposeResult')中

时间:2012-08-01 14:45:11

标签: compiler-warnings xcode4.4

其他人在Xcode 4.4中收到此警告?

案例值不在枚举类型'MessageComposeResult'(又名'enum MessageComposeResult')

MFMailComposeResultFailed包含在文档中解除邮件撰写界面时返回的结果代码中。但是,文档列出了它,但GCC警告它不是MessageComposeResult中的枚举。为什么呢?

    case MFMailComposeResultFailed:{
        //do something here
    }
        break;

以下是调用此案例的扩展方法(我已注释此枚举以禁用警告):

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {

UIAlertView *errormsg = nil;
// Notifies users about errors associated with the interface
switch (result)
{
    case MFMailComposeResultCancelled:
    {
        //Do something, If you need to
        NSString *msgtitle = @"Cancelled Mail";
        NSString *Bodymsg = @"Email Has been Cancelled by USER. You may continue to make modifications to the current attendance data at this point.";
        errormsg = [[UIAlertView alloc] initWithTitle:msgtitle message:Bodymsg delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil];
    }
        break;
    case MFMailComposeResultSaved:{/*Do nothing at this point*/}
        break;
         //NOTE: MFMailComposeResultFailed is included in Result codes returned when the mail composition interface is dismissed. However the documentation lists it but the GCC warns it is NOT an enum within MessageComposeResult. May be an Apple Bug.
    /*case MFMailComposeResultFailed:{
        NSString *title = @"Unable to Send Mail";
        NSString *msg = @"Failed:\nmessage was not saved or queued, possibly due to an error.\nCheck your mail sent or draft items.";
        errormsg = [[UIAlertView alloc] initWithTitle:title message:msg delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil];
    }
        break;
       */  
    case MFMailComposeResultSent:{
        NSString *title = @"Mail Sent";
        NSString *msg = @"Attendance Email has been sent. Thank you.";

        errormsg = [[UIAlertView alloc] initWithTitle:title message:msg delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil];
        //clean up data
        //code here irrelevant
        //set a completed flag for sent email in system

        //display Alert and dismiss the mail composer view here
        UIAlertView *alertView = nil;

        if (result) {
            alertView = [[UIAlertView alloc] initWithTitle:@"AttendanceViewController: viewDidLoad" message:@"updateProgressOfClassInstance FAILED" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        }
        if (alertView != nil) {
            [alertView show];
        }

    }
        break;
    default:
        break;
}
//dismiss view and display any errors here.
[self dismissModalViewControllerAnimated:YES];
if (errormsg != nil) {
    [errormsg show];
}

我希望这能为你们澄清一下。谢谢!

(更新)好的,我的代码有几个问题我没有意识到存在。我修复了它们,下面是正确的switch语句。

switch (result)
{
    case MessageComposeResultCancelled:
    {
        //Do something, If you need to!
    }
        break;

    case MessageComposeResultFailed:{
        //Do something else, If you need to!!
    }
        break;

    case MessageComposeResultSent:{
        //Do something user friendly, If you need to!

    }
        break;

    default:
        break;
}

在自由世界和堆栈溢出中保持摇滚!活泉!

1 个答案:

答案 0 :(得分:0)

您正在混淆错误代码。结果枚举具有您看到的三个值。

在此委托方法的错误中返回“MFMailComposeResultFailed”值:

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

查看此deocumentation页面的底部:

MFMailComposeViewController Class Reference