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];
}
세 주석 라인이 대안을하는 I 시도했었다. MFMessageComposeViewController가 화면에 남아 있지만 (키보드가 닫히지 만) 대리자가 스택에서 튀어 나오고 있습니다. 따라서 다시 취소 할 때 null 참조 오류가 발생합니다.
이 구현은 코드 내 다른 곳에서 작동하기 때문에 이상하지 않습니다. 유일한 차이점은 초기화 할 본문을 설정했기 때문입니다.
왜 잘못된 VC가 여기 갑자기 터지게 되었는가?
감사합니다.
편집 - 깨진 구현은 UIView Controller가 아닌 UITableViewController에 있습니다. 문제의 원인이 될 수 있습니까?
TableVC에 대한 편집과 별도로 모든 것이 (한 지점에서) 정확히 같은 방식으로 구현되었습니다. 'setBody' 호출도 주석 처리했습니다. 그것은 여전히 애플 리케이션의 다른 곳에서 작동합니다. 취소 버튼이 작동하지 않는 것은 바로 여기에 있습니다. –