4

コードに次の警告があります (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
4

3 に答える 3

8

あなたが使用している:

MFMailComposeViewControllerDelegate

あるべき場所:

MFMessageComposeViewControllerDelegate

ここで変更:

@interface MainViewController : TrackedUIViewController <MFMessageComposeViewControllerDelegate> {
于 2012-06-20T07:43:19.120 に答える
3

ヘッダー ファイルに UINavigationControllerDelegate を実装します。

于 2012-06-20T07:49:10.333 に答える
0

このライブラリでは機能しませんでしたが、ご覧のとおり、MainViewControllerはMF*メール*ComposeViewControllerDelegateですが、MF*メッセージ*ComposeViewControllerDelegateとして設定しています。

于 2012-06-20T07:46:08.620 に答える