以编程方式控制iPhone OS版本以启用OS 3.x和4的功能 - MFMessageComposeViewController问题

Dar*_*ang 6 iphone ios4

为了支持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

你需要确保你做了一些事情:

在目标的构建设置中:

  • 将Base SDK设置为iPhone Device 4.0
  • 将iPhone OS部署目标设置为iPhone OS 3.1.3(或更低版本)

在目标的常规设置中,在"链接库"下,将"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)