微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单击 MFMessageComposerController 中的发送/取消按钮会使应用程序崩溃

如何解决单击 MFMessageComposerController 中的发送/取消按钮会使应用程序崩溃

你好 StackOverFlow 用户

我需要通过调用 MFMessageController 从我的应用程序发送 SMS,所以我所做的是我使用 ViewController 作为基类创建了一个 MFMessageComposeViewController 一切正常,但有时当我点击发送或取消按钮时,应用程序崩溃:下面是代码

MessageController.h

#import <MessageUI/MessageUI.h>
NS_ASSUME_NONNULL_BEGIN
@protocol SMSControllerDelegate
-(void) smsResult:(Nsstring*) smsInterfaceResult;
@end

@interface MessageController : MFMessageComposeViewController
@property (assign,nonatomic) id<SMSControllerDelegate> smsDelegate;

@end

NS_ASSUME_NONNULL_END

MessageController.m

#import "MessageController.h"

@interface MessageController()<UINavigationControllerDelegate,MFMessageComposeViewControllerDelegate>
@property (strong,nonatomic) Nsstring *insideMessage;
@end

@implementation MessageController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.messageComposeDelegate = self;
}

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
    //test result
    switch (result) {
        //MessageComposeResultCancelled: User canceled the composition.
        case MessageComposeResultCancelled:
            NSLog(@"Result: SMS sending canceled") ;
            [self sendResult:@"Cancelled"];
            break;
        //MessageComposeResultSent: User successfully sent/queued the message.
        case MessageComposeResultSent:
            NSLog(@"Result: SMS sent");
            [self sendResult:@"SMSSent"];
            break;
        //MessageComposeResultFailed: User's attempt to save or send was unsuccessful.
        case MessageComposeResultFailed:
            NSLog(@"Result: SMS sending Failed");
            break;
        default:
            break;
    }

    //dismiss view
    [self dismissViewControllerAnimated:YES completion:nil];
}

-(void) sendResult:(Nsstring*) result
{
    [_smsDelegate smsResult:result];
}

@end

现在我正在通过下面的代码设置另一个类的电话号码和消息正文:

MessagePasser.m

#import "MessagePasser.h"



@implementation MessagePasser

+(id)init {
    static MessagePasser *reader = nil;
     reader = [[self alloc] init];

    return reader;
 
}
// -------------------------------------------------------------------------------
//  Native Messages App
//  displays Native SMS composition interface inside the application.
// -------------------------------------------------------------------------------

- (void) sendMessage:(Nsstring*)sendingMessage receiverNumber:(Nsstring*)toPhoneNumber {
    if([MessageController canSendText]) {
    MessageController *messageController = [[MessageController alloc]init];
  //  self.callbackObj = callBack;
    UIWindow *window =  [[[UIApplication sharedApplication] windows] firstObject];
    UIViewController *vc = [window rootViewController];
//    UINavigationController *navController = (UINavigationController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
//    [navController pushViewController:webview animated:YES];
    messageController.body = sendingMessage;
    messageController.recipients = [NSArray arrayWithObject:@"90900"];
    messageController.smsDelegate = self;
    NSLog(@"Message Body %@",messageController.body);
    dispatch_async(dispatch_get_main_queue(),^{
    UIWindow * currentwindow = [[UIApplication sharedApplication] keyWindow];
          [currentwindow.rootViewController presentViewController:messageController animated:NO completion:nil];
            }
            );
        } else {
            NSLog(@"Simulator not supported");
        }
}

-(void) smsResult:(Nsstring*) smsInterfaceResult {
  NSArray * result = [[NSArray alloc] initWithObjects:smsInterfaceResult,nil];
    NSLog(@"SMS Interface result %@",smsInterfaceResult);
  //executeClosure(self.callbackObj,result,NO);
}
@end

MessagePasser.h

#import <Foundation/Foundation.h>
#import "MessageController.h"


@interface MessagePasser : UIViewController <SMSControllerDelegate>

+(id)init;
- (void) sendMessage:(Nsstring*)sendingMessage receiverNumber:(Nsstring*)toPhoneNumber;

@end

一切正常,但有时当我按下发送或取消按钮时,应用程序会崩溃。我的代码有什么问题?请帮忙

崩溃日志是:

我的应用程序[300: 134567] -[__NSCFType smsResult:]: 无法识别的选择器已发送 到实例 0x11bea7ad0

我的应用程序[352:134567] *** 由于以下原因终止应用程序 未捕获的异常 'NSinvalidargumentexception',原因:'-[__NSCFType smsResult:]: 无法识别的选择器发送到实例 0x11bea7ad0'

Cancel and send button shown by arrows

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。