16

MFMailComposeViewController をモーダルで開くビュー コントローラーがあります。メール ビュー コントローラーのデリゲートを親ビュー コントローラーに設定しようとすると、次の警告が表示されます。

Assigning to 'id<UINavigationControllerDelegate>' from incompatible
type 'MoreViewController *__strong'

親ビュー コントローラーには、インターフェイス宣言に MFMailComposeViewControllerDelegate が含まれており-mailComposeController: didFinishWithResult:error:、次のようにデリゲート メソッドを実装しています。

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    NSLog(@"Delegate called");
}

親View ControllerがUINavigationControllerDelegateとして認識されている理由が本当にわかりません。これらのメソッドを実装していないか、そのように宣言していないからです。それほど心配する必要はありませんが、デリゲート メソッドが呼び出されることはないため、この「不一致」が問題の一部であると推測しています。

それが役立つ場合、これは私がメールビューコントローラーを初期化する方法ですviewDidLoad:

// MAIL
self.mail = [[MFMailComposeViewController alloc] init];
self.mail.delegate = self;

ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

31

mailComposeDelegateではなく設定したいdelegate

self.mail.mailComposeDelegate = self;

基本的に、delegatewhich は からMFMailComposeViewController継承されているため、を実装する必要があるUINavigationControllerことを意味します。delegateUINavigationControllerDelegate

于 2012-03-17T20:45:32.520 に答える