为了支持iPhone OS 3.x和4.0,我以编程方式控制MFMessageComposeViewController这样的功能(仅在OS版本为4.0或更高版本时使用它):
// if iPhone OS version >= 4.0
if (os_version_num >= 4) {
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
if([MFMessageComposeViewController canSendText])
{
controller.body = text;
controller.recipients = [NSArray arrayWithObjects: nil];
controller.messageComposeDelegate = self;
[self presentModalViewController:controller animated:YES];
[controller release];
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在iPhone 3.1.3设备上运行它时,我立即收到以下错误(甚至在应用程序加载之前):
dyld: Symbol not found: _OBJC_CLASS_$_MFMessageComposeViewController
Referenced from: /var/mobile/Applications/7232C474-FAD5-4E28-ABC5-8520F62300B0/TextMe.app/TextMe
Expected in: /System/Library/Frameworks/MessageUI.framework/MessageUI
Run Code Online (Sandbox Code Playgroud)
数据格式化程序暂时不可用,将在"继续"后重试.(此时调用dlopen不安全.)
我究竟做错了什么?
Chr*_*lay 17
你需要确保你做了一些事情:
在目标的构建设置中:
在目标的常规设置中,在"链接库"下,将"MessageUI.framework"旁边的"类型"更改为"弱".
不导入<MessageUI/MFMessageComposeViewController.h>或在3.x中启动时会崩溃.只需导入<MessageUI/MessageUI.h>
我不知道os_version_num是什么,但这里是我用来测试MFMessageComposeViewController可用性的代码:
Class smsClass = (NSClassFromString(@"MFMessageComposeViewController"));
if (smsClass != nil && [MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
controller.body = text;
controller.recipients = [NSArray arrayWithObjects: nil];
controller.messageComposeDelegate = self;
[self presentModalViewController:controller animated:YES];
[controller release];
}
Run Code Online (Sandbox Code Playgroud)