2 linhas significam que não funcionará no iPad
-
26-09-2020 - |
Pergunta
Temos um projeto que funciona bem no OS4, mas estamos tendo problemas para executá-lo no iPad 3.2.
O SDK base é 4.0 e o destino de implantação é 3.2.
O código trava no simulador (e dispositivo) do iPad antes mesmo de ser iniciado, com o erro
"Formatatos de dados temporariamente indisponíveis"
Parece funcionar bem se eu retirar 2 linhas ...
AVURLAsset* asset = [AVURLAsset URLAssetWithURL:assetURL options:options];
e
export = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetPassthrough];
Eu ramifico de acordo com o sistema operacional presente para que essas linhas nunca seja alcançado quando em um dispositivo 3.2 (eu sei que eles são OS4), mas apenas eles estarem lá faz com que a coisa trave antes mesmo de começar.
Alguma ideia?Saúde
Solução
Se essas linhas nunca forem alcançadas no iPad, você poderá encontrar um problema devido à falta de link fraco da estrutura AVFoundation (e potencialmente de outras).Como AVURLAsset e AVAssetExportSession não existem como símbolos na versão 3.2, seu aplicativo pode travar na inicialização desse sistema operacional mais antigo.
Descrevo como vincular fracamente uma estrutura em resposta a uma problema semelhante em esta resposta.
Outras dicas
Primeiro de tudo, "Formatadores de dados temporariamente indisponíveis" é uma mensagem do GDB, é não por que seu aplicativo falha.Mais informações sobre esta mensagem podem ser encontradas aqui.
Você precisa verificar a disponibilidade de classes durante o tempo de execução (não em tempo de compilação) se quiser escrever código que seja executado no iOS 3.0 e 4.0.
Você pode fazer isso usando o NSClassFromString
funcionar assim:
if (NSClassFromString(@"AVURLAsset")) {
// 4.0 code using AVURLAsset goes here
} else {
// 3.0 code goes here
}
Tente isto (ou similar):
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 40000
// code for iOS below 4.0
#else
// code for iOS 4.0
#endif
Roubado de essa questão.