私はMFMessageComposeViewControllerDelegateプロトコルに準拠したVCを持っています。私は正常に次のコードで、このビューコントローラを提示していますMFMessageComposeVIewControllerが自身の代わりにデリゲートを破棄しています
:
- (IBAction)textAction:(id)sender {
if(![MFMessageComposeViewController canSendText])
{
UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Your device doesn't support SMS!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[warningAlert show];
return;
}
NSString *numberToCallOrText = self.phoneNumber;
NSString *message = @"Test message";
NSArray *recipients = [NSArray arrayWithObject:numberToCallOrText];
MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
messageController.messageComposeDelegate = self;
[messageController setRecipients:recipients];
[messageController setBody:message];
// Present message view controller on screen
[self.view endEditing:YES];
[self presentViewController:messageController animated:YES completion:nil];
}
はまた、私はそうのような仕上がりの結果を処理しています:
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult) result
{
switch (result) {
case MessageComposeResultCancelled:
NSLog(@"Canceled");
break;
case MessageComposeResultFailed:
{
NSLog(@"Failed");
UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to send SMS!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[warningAlert show];
break;
}
case MessageComposeResultSent:
NSLog(@"sent");
[self.navigationController popViewControllerAnimated:YES];
break;
default:
break;
}
[controller.view endEditing:YES];
[self.navigationController popViewControllerAnimated:YES];
// [self dismissViewControllerAnimated:YES completion:nil];
// [controller popToViewController:self animated:YES];
// [controller dismissViewControllerAnimated:YES completion:nil];
}
3つのコメントアウト行は私の選択肢です試しました。 MFMessageComposeViewControllerが画面に残っている(キーボードが消滅しても)が、デリゲートがスタックからポップされていることが起こります。したがって、再度キャンセルを押すと、null参照エラーが発生します。
この同じ実装は私のコードのどこかで動作するので、奇妙です。唯一の違いは、ボディを初期化するように設定していることです。
間違ったVCがここにポップされている理由は何ですか?
ありがとうございました。
編集 - 壊れた実装は、UIView ControllerではなくUITableViewControllerにあります。問題の原因は何ですか?
TableVCについての編集とは別に、すべてが(一点で)*まったく同じ方法で実装されていました。 'setBody'呼び出しもコメントアウトしました。それはまだアプリの他の場所で動作します。キャンセルボタンが機能しないのはここだけです。 –