29 votes

Catégories Objective-C: Puis-je ajouter une propriété pour une méthode qui ne fait pas partie de ma catégorie?

Je veux utiliser une catégorie pour en faire une méthode de la classe d'origine disponibles en tant que propriété ainsi.

Catégorie A:

@interface ClassA
- (NSString*)foo;
@end

Catégorie A catégorie

@interface ClassA (Properties)
- (void)someCategoryMethod;
@property (nonatomic, readonly) NSString *foo;
@end

Maintenant, quand je fais cela, il semble fonctionner (EDIT: Peut-être que ça ne fonctionne pas, il ne se plaint pas mais je vois étrangeté), mais il me donne des avertissements parce que je ne suis pas synthétiser la propriété dans ma catégorie de mise en œuvre. Comment puis-je dire au compilateur de tout ce qui est en fait juste pas de problème puisque la classe d'origine synthétise le bien pour moi?

34voto

codewarrior Points 711

Voici l'avertissement que vous recevez:

warning: property ‘foo' requires method '-foo' to be defined - use @synthesize, @dynamic or provide a method implementation

Pour supprimer cet avertissement, insérez-le dans votre implémentation:

@dynamic foo;

1voto

Josh Freeman Points 1397

Si quelque chose est déclaré dans l'interface de votre catégorie, sa définition appartient à l'implémentation de votre catégorie.

1voto

Yar Points 25421

J'ai écrit deux articles sur ce, bien que le concept est légèrement différent de la question posée.

  1. Ajouter des propriétés à des catégories sans toucher à la classe de base: http://compileyouidontevenknowyou.blogspot.com/2012/06/adding-properties-to-class-you-dont.html
  2. L'accès iVars de catégories: http://compileyouidontevenknowyou.blogspot.com/2012/06/if-you-want-to-keep-everything-in-your.html

C'est BEAUCOUP mieux que la méthode swizzling, au moins: de façon plus sécuritaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X