Domanda

Ho un progetto che ha come bersaglio sia per Mac OS X 10.4 e 10.5, dove 10.5 è l'SDK di base.

Alcuni metodi come -[NSString stringByReplacingOccurrencesOfString:withString] non sono disponibili in 10.4. Ho potuto solo implementare la funzionalità a mano. Un'altra opzione potrebbe essere quella di implementare il metodo come una categoria, ma che avrebbe pasticcio con il 10.5 implementazione e questo è qualcosa che vorrei evitare.

Quindi, come faccio a implementare tali metodi a 10.4 senza rovinare 10.5 e in modo tale che posso togliere l'attuazione facilmente quando decido di smettere di sostenere 10.4?

È stato utile?

Soluzione

Credo che bisogna usare +load e +initialize per caricare un metodo a runtime se il metodo non esiste già.

Altri suggerimenti

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

Utilizzare una categoria, ma mettere un tag sul nome del metodo; per esempio, stringByReplacingOccurrencesOfString_TigerCompatible:. Nell'implementazione, chiamare sia l'implementazione di leopardo o la propria.

Quando si va Leopard-only, fate una ricerca del progetto per “TigerCompatible”, quindi burninate tutti questi metodi e non-tag tutti i loro siti di chiamata.

Mettere tutto l'implementazione mancante in categorie in un fascio che viene caricato all'avvio in main (), se in esecuzione con Tiger.

Come sull'utilizzo di un preprocessore macro C per inserire i relativi metodi se è in costruzione per 10,4? Magari provare a fare qualcosa di simile in una categoria, in modo da quei metodi che non esistono su 10.4 sono inclusi solo se è in costruzione per 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

Avete bisogno di supportare 10.4? Se stai usando solo i metodi 10.5 in parti fondamentali della vostra applicazione, allora potrebbe essere il momento di prendere in considerazione di andare 10.5 solo.

In ogni caso, con l'esempio specifico dato sopra, vi suggerisco di allontanarsi da questo e fare una copia mutabile della stringa in modo da poter utilizzare il metodo simile su NSMutableString che funziona nel 10,4

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top