2行意味着它不能在iPad上运行

时间:2010-07-21 14:30:23

标签: iphone iphone-sdk-3.2

我们有一个在OS4上运行良好的项目,但我们在iPad 3.2上运行时遇到了问题。

Base SDK为4.0,部署目标为3.2。

代码在iPad模拟器(和设备)启动之前崩溃,错误

  

“数据格式化程序暂时   不可用“

如果我走2条线似乎运行正常......

AVURLAsset* asset = [AVURLAsset URLAssetWithURL:assetURL options:options];

export = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetPassthrough];

我根据操作系统的存在进行分支,以便在3.2设备上时这些线路永远不会达到(我知道它们是OS4),但只是它们在那里会让事情崩溃甚至在它开始之前。

有什么想法吗? 干杯

3 个答案:

答案 0 :(得分:4)

首先,“数据格式化程序暂时不可用”是GDB消息,为什么您的应用程序崩溃。有关此邮件的详细信息,请参阅here

如果要编写在iOS 3.0和4.0上运行的代码,则需要在运行时(非编译时)检查类的可用性。

您可以使用NSClassFromString函数执行此操作:

if (NSClassFromString(@"AVURLAsset")) {
    // 4.0 code using AVURLAsset goes here
} else {
    // 3.0 code goes here
}

答案 1 :(得分:4)

如果iPad上从未到达过这些行,则可能会遇到问题,因为AVFoundation框架(以及其他可能的框架)没有弱链接。由于AVURLAsset和AVAssetExportSession在3.2中不作为符号存在,因此您的应用程序可能会在较旧的操作系统上启动时崩溃。

我介绍了如何弱化链接框架以响应similar problem中的this answer

答案 2 :(得分:0)

试试这个(或类似的):

#if __IPHONE_OS_VERSION_MIN_REQUIRED < 40000
  // code for iOS below 4.0
#else
  // code for iOS 4.0
#endif

this question被盗。