2 строки означают, что он не будет работать на iPad
-
26-09-2020 - |
Вопрос
У нас есть проект, который отлично работает на 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), но просто их присутствие там вообще приводит к сбою еще до того, как оно начнется.
Есть какие-нибудь идеи?Овации
Решение
Если эти линии никогда не достигаются на iPad, вы можете столкнуться с проблемой из-за не слабых связей структуры AVFoundation (и потенциально других).Поскольку Avurlasset и Avassetexpordsion не существуют как символы в 3.2, ваше приложение может быть сбивается при запуске на этой старой ОС.
Я описываю, как слабая ссылку рамки в ответ на похожая проблема в
Другие советы
Прежде всего, "Форматировщики данных временно недоступны" - это сообщение GDB, это нет почему ваше приложение выходит из строя.Более подробную информацию об этом сообщении можно найти здесь здесь.
Вам нужно проверить доступность классов во время выполнения (не во время компиляции), если вы хотите написать код, который будет работать как на iOS 3.0, так и на 4.0.
Вы можете сделать это с помощью NSClassFromString
функционировать подобным образом:
if (NSClassFromString(@"AVURLAsset")) {
// 4.0 code using AVURLAsset goes here
} else {
// 3.0 code goes here
}
Попробуйте это (или похоже):
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 40000
// code for iOS below 4.0
#else
// code for iOS 4.0
#endif
.
украдена из