objective c - Categorías de Objective-C: ¿Puedo agregar una propiedad para un método que no esté en mi categoría?
properties categories (3)
Aquí está la advertencia que está recibiendo:
warning: property ''foo'' requires method ''-foo'' to be defined - use @synthesize, @dynamic or provide a method implementation
Para suprimir esta advertencia, ten esto en tu implementación:
@dynamic foo;
Quiero usar una categoría para hacer que un método en la clase original también esté disponible como propiedad.
Clase A:
@interface ClassA
- (NSString*)foo;
@end
Categoría clase A
@interface ClassA (Properties)
- (void)someCategoryMethod;
@property (nonatomic, readonly) NSString *foo;
@end
Ahora, cuando hago esto, parece funcionar ( EDITAR: Tal vez no funcione, no se queje, pero veo algo extraño), pero me advierte porque no estoy sintetizando la propiedad en la implementación de mi categoría. ¿Cómo le digo al compilador que todo está realmente bien ya que la clase original sintetiza la propiedad para mí?
Escribí dos artículos sobre esto, aunque el concepto es ligeramente diferente de la pregunta que estás haciendo.
- Agregue propiedades a las categorías sin tocar la clase base: http://compileyouidontevenknowyou.blogspot.com/2012/06/adding-properties-to-class-you-dont.html
- Acceda a las iVars desde las categorías: http://compileyouidontevenknowyou.blogspot.com/2012/06/if-you-want-to-keep-everything-in-your.html
Esto es MUCHO mejor que el método swizzling, al menos: mucho más seguro.
Si algo está declarado en la interfaz de su categoría, su definición pertenece a la implementación de su categoría.