问题描述
你好 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'
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)