以编程方式控制iPhone OS版本以启用OS 3.x和4的功能 - MFMessageComposeViewController问题 [英] Programmatically control iPhone OS versions to enable functions for both OS 3.x and 4 - MFMessageComposeViewController problem

查看:109
本文介绍了以编程方式控制iPhone OS版本以启用OS 3.x和4的功能 - MFMessageComposeViewController问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了支持iPhone OS 3.x和4.0,我以编程方式控制MFMessageComposeViewController这样的功能(仅在操作系统版本为4.0或更高版本时使用它):

In order to support iPhone OS 3.x and 4.0 I programmatically control MFMessageComposeViewController functionality like this (use it only if the OS version is 4.0 or above):

// 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];
   }
}

但是,当我尝试在iPhone 3.1上运行它时.3设备,我立即得到以下错误(甚至在应用程序加载之前):

But, when I try to run it on iPhone 3.1.3 device, I immediately get the following error (even before application gets loaded):

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

数据格式化程序暂时不可用,将在继续后重试。 (此时打电话给dlopen是不安全的。)

Data Formatters temporarily unavailable, will re-try after a 'continue'. (Not safe to call dlopen at this time.)

我做错了什么?

推荐答案

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

You need to make sure you're doing a few things:

在目标的构建设置中:


  • 将Base SDK设置为iPhone Device 4.0

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

在目标的常规设置中,在Linked Libraries下,将MessageUI.framework旁边的Type更改为Weak。

In your target's general settings, under Linked Libraries, change the "Type" next to MessageUI.framework to Weak.

不要导入< MessageUI / MFMessageComposeViewController.h> ,否则它将在3.x中启动时崩溃。只需导入< MessageUI / MessageUI.h>

Don't import <MessageUI/MFMessageComposeViewController.h> or it will crash on launch in 3.x. Just import <MessageUI/MessageUI.h>

我不知道os_version_num是什么,但这里是代码我用来测试MFMessageComposeViewController的可用性:

I don't know what os_version_num is, but here's the code I use to test for the availability of 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];                
}

这篇关于以编程方式控制iPhone OS版本以启用OS 3.x和4的功能 - MFMessageComposeViewController问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆