Assigning to 'id<MFMessageComposeViewControllerDelegate>' from incompatible type 'MainViewController *'
ios, ios4, iphone, xcode, xcode4.3
Solution
You are using:
MFMailComposeViewControllerDelegate
Where it should be:
MFMessageComposeViewControllerDelegate
Change here:
@interface MainViewController : TrackedUIViewController <MFMessageComposeViewControllerDelegate> {
Problem
I have the following warning in my code (XCode 4.3 / iOS 4/5) - Assigning to 'id' from incompatible type 'MainViewController *' The warning is raised in this section - ``` - (IBAction)sendInAppSMS:(id)sender { MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease]; if([MFMessageComposeViewController canSendText]) { controller.body = @"A test message from http://www.macoscoders.com"; controller.recipients = [NSArray arrayWithObjects:@"9880182343",nil]; controller.messageComposeDelegate = self; [self presentModalViewController:controller animated:YES]; } } ``` In particular this line - ``` controller.messageComposeDelegate = self; ``` In a bit confused as to what is wrong with my code. Googling for the Warning I found some references but I'm having difficulty in understanding the answers. Any pointers / explanations would be greatly appreciated. Best regards rob My complete .h file - ``` #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> #import <AudioToolbox/AudioToolbox.h> #import <MessageUI/MessageUI.h> #import "EasyTracker.h" @interface MainViewController : TrackedUIViewController <MFMailComposeViewControllerDelegate> { IBOutlet UIView *volumeSlider; AVPlayer *radiosound; IBOutlet UIButton *playpausebutton; IBOutlet UIActivityIndicatorView *activityIndicator; NSTimer *timer; } @property(nonatomic, retain) AVPlayer *radiosound; @property(nonatomic, retain) UIButton *playpausebutton; - (void)updatebuttonstatus; - (void)playCurrentTrack; - (void)pauseCurrentTrack; - (IBAction)playbutton; - (IBAction)openMail:(id)sender; - (IBAction)sendInAppSMS:(id)sender; @end ``` Highlights from my .m file - ``` #import "MainViewController.h" #import <AVFoundation/AVFoundation.h> #import <AudioToolbox/AudioToolbox.h> #import <MediaPlayer/MediaPlayer.h> #import "radio99AppDelegate.h" @implementation MainViewController - (IBAction)sendInAppSMS:(id)sender { MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease]; if([MFMessageComposeViewController canSendText]) { controller.body = @"A test message from http://www.macoscoders.com"; controller.recipients = [NSArray arrayWithObjects:@"9880182343",nil]; controller.messageComposeDelegate = self; [self presentModalViewController:controller animated:YES]; } } - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result { switch (result) { case MessageComposeResultCancelled: { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SMSTester" message:@"User cancelled sending the SMS" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; [alert release]; } break; case MessageComposeResultFailed: { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SMSTester" message:@"Error occured while sending the SMS" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; [alert release]; } break; case MessageComposeResultSent: { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SMSTester" message:@"SMS sent successfully..!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; [alert release]; } break; default: break; } [self dismissModalViewControllerAnimated:YES]; } - (IBAction)openMail:(id)sender { if ([MFMailComposeViewController canSendMail]) { MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init]; mailer.mailComposeDelegate = self; [mailer setSubject:@"A Message from MobileTuts+"]; NSArray *toRecipients = [NSArray arrayWithObjects:@"fisrtMail@example.com", @"secondMail@example.com", nil]; [mailer setToRecipients:toRecipients]; UIImage *myImage = [UIImage imageNamed:@"mobiletuts-logo.png"]; NSData *imageData = UIImagePNGRepresentation(myImage); [mailer addAttachmentData:imageData mimeType:@"image/png" fileName:@"mobiletutsImage"]; NSString *emailBody = @"Have you seen the MobileTuts+ web site?"; [mailer setMessageBody:emailBody isHTML:NO]; [self presentModalViewController:mailer animated:YES]; [mailer release]; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure" message:@"Your device doesn't support the composer sheet" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; [alert release]; } } #pragma mark - MFMailComposeController delegate - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { switch (result) { case MFMailComposeResultCancelled: NSLog(@"Mail cancelled: you cancelled the operation and no email message was queued"); break; case MFMailComposeResultSaved: NSLog(@"Mail saved: you saved the email message in the Drafts folder"); break; case MFMailComposeResultSent: NSLog(@"Mail send: the email message is queued in the outbox. It is ready to send the next time the user connects to email"); break; case MFMailComposeResultFailed: NSLog(@"Mail failed: the email message was nog saved or queued, possibly due to an error"); break; default: NSLog(@"Mail not sent"); break; } [self dismissModalViewControllerAnimated:YES]; } @end ```