我的代码中有以下警告(XCode 4.3 / iOS 4/5) –
从不兼容的类型’MainViewController *’分配’id’
本节提出警告 –
- (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]; } }
特别是这条线 –
controller.messageComposeDelegate = self;
有点困惑我的代码有什么问题.谷歌搜索警告我发现了一些参考,但我很难理解答案.
任何指针/解释将不胜感激.
最好的祝福
抢
我完整的.h文件 –
#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
我的.m文件的亮点 –
#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
解决方法
您正在使用:
MFMailComposeViewControllerDelegate
它应该在哪里:
MFMessageComposeViewControllerDelegate
在这里改变:
@interface MainViewController : TrackedUIViewController <MFMessageComposeViewControllerDelegate> {