Pergunta

Eu tenho um projeto que os alvos tanto o Mac OS X 10.4 e 10.5, onde 10,5 é o SDK base.

Alguns métodos como -[NSString stringByReplacingOccurrencesOfString:withString] não estão disponíveis em 10,4. Eu poderia apenas implementar a funcionalidade com a mão. Outra opção seria a de implementar o método como uma categoria, mas que iria mexer com a implementação 10,5 e isso é algo que eu gostaria de evitar.

Então, como faço para implementar tais métodos em 10,4 sem bagunçar 10,5 e de tal maneira que eu possa tirar a implementação facilmente quando eu decidir parar de apoiar 10.4?

Foi útil?

Solução

Eu acho que você tem que usar +load e +initialize para carregar um método em tempo de execução Se o método não já existe.

Outras dicas

if ([myString respondsToSelector: @selector(stringByReplacingOccurrencesOfString:withString:)])
{
  // 10.5 implementation
}
else
{
  // 10.4 implementation
}

Use uma categoria, mas colocar uma etiqueta sobre o nome do método; por exemplo, stringByReplacingOccurrencesOfString_TigerCompatible:. Na implementação, chamada quer implementação do Leopard ou o seu próprio.

Quando você vai Leopard-somente, fazer uma pesquisa projeto para “TigerCompatible”, então burninate todos esses métodos e un-tag todos os seus sites de chamada.

Coloque toda a implementação faltando em categorias em um pacote que é carregado na inicialização em main () se estiver rodando sob Tiger.

Que tal usar um pré-processador macro C para inserir os métodos relevantes se ele está sendo construído para 10,4? Talvez tente fazer algo assim em uma categoria, para que esses métodos que não existem em 10.4 só são incluídas se ele está sendo construído para 10,4?

#if defined(MAC_OS_X_VERSION_10_4) && MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
// Put your implementations of the methods here
#endif

Você precisa apoiar 10.4? Se você estiver usando 10,5 únicos métodos em partes principais do seu aplicativo, então talvez seja hora de considerar indo 10.5 somente.

De qualquer forma, com o exemplo específico dado acima, sugiro se afastando com isso e fazer uma cópia mutável da seqüência de modo que você pode usar o método semelhante sobre NSMutableString que funciona em 10,4

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top