¿Hay alguna forma de proporcionar una implementación de método (que lleva exactamente el mismo nombre de un método definido por el marco) solo cuando el método no está ya definido en el sistema? Por ejemplo, el método [NSSomeClass someMethod:]
existe solo en Mac OS X 10.6 y si mi aplicación se ejecuta en 10.5, proporcionaré la definición de ese método en una categoría. Pero cuando la aplicación se ejecuta en 10.6, quiero que se ejecute el método proporcionado por el sistema operativo.Anulando condicionalmente un método de sistema por categorías en Objective-C?
Fondo: Estoy creando una aplicación dirigida tanto para 10.5 como para 10.6. El problema es que recientemente me di cuenta de que el método +[NSSortDescriptor sortDescriptorWithKey:ascending:]
solo existe en 10.6 y mi código ya está cubierto por esa llamada al método. Podría proporcionarle una implementación predeterminada (ya que esta vez no es demasiado difícil implementarlo yo mismo), pero quiero que se llame al "nativo" siempre que mi aplicación se ejecute en 10.6. Además, si encuentro problemas similares en el futuro (con métodos más difíciles de implementar), es posible que no pueda salirse con la suya proporcionando un reemplazo de una sola línea.
Esta pregunta vagamente similar a Override a method via ObjC Category and call the default implementation? pero la diferencia es que quiero proporcionar implementaciones solo cuando el sistema no tiene una.
Gracias.
+1 enfoque inteligente :) –
De acuerdo. Muy bueno de verdad. –