我们有一个在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),但只是它们在那里会让事情崩溃甚至在它开始之前。
有什么想法吗? 干杯
答案 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