1

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

基础 SDK 为 4.0,部署目标为 3.2。

代码在 iPad 模拟器(和设备)上甚至在启动之前就崩溃了,并出现错误

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

如果我取出 2 条线,它似乎运行良好......

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

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

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

有任何想法吗?干杯

4

3 回答 3

4

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

我描述了如何弱链接框架以响应此答案中的类似问题

于 2010-07-21T16:58:15.983 回答
4

首先,“数据格式化程序暂时不可用”是一条 GDB 消息,这不是您的应用程序崩溃的原因。可以在此处找到有关此消息的更多信息。

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

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

if (NSClassFromString(@"AVURLAsset")) {
    // 4.0 code using AVURLAsset goes here
} else {
    // 3.0 code goes here
}
于 2010-07-21T14:45:13.493 回答
0

试试这个(或类似的):

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

从这个问题偷来的。

于 2010-07-21T14:35:48.563 回答