2012-10-21 15 views
6

È necessario creare una categoria con una nuova variabile (di tipo NSArray).Come aggiungere una variabile alla categoria in Objective-C?

OriginalClass + Extension.h:

@interface OriginalClass (Extension) { 
    NSArray *_array; 
} 

@property (nonatomic, retain) NSArray *array; 

@end 

ma ho ottenuto l'errore: Cannot declare variable inside @interface or @protocol.

Si prega di aiutare a risolvere il problema.

risposta

4

Come l'altro ha dichiarato, non è possibile. Sebbene sia stato rilevato H2CO3, è possibile utilizzare associative references. Su Apple Documents:

Note that a category can’t declare additional instance variables for the class; it includes only methods. However, all instance variables within the scope of the class are also within the scope of the category. That includes all instance variables declared by the class, even ones declared @private.

Se si vuole andare per oggetto associato, è possibile utilizzare this risposta. Inoltre, è possibile utilizzare il post this di Ole Begemann.

+0

Cool solution, thanks! – Dmitry

+0

@Altaveron La stessa soluzione alternativa proposta da H2CO3, in precedenza ... (StackOverflow è strano :-)) – aleroot

+0

Questa risposta ha un collegamento al codice esatto. – Dmitry

2

Semplice: non è possibile aggiungere variabili di istanza a una classe utilizzando una categoria.

Se avete bisogno di memorizzare dati aggiuntivi: utilizzare associated objects.

+0

Ma come conservare i dati? – Dmitry

+1

@Altaveron forse gli oggetti associati possono aiutarti. (Vedere la mia risposta modificata.) –

+1

Una categoria consente di aggiungere metodi a una classe esistente. Periodo. Vedi http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html – kamprath

3

Non è possibile, una categoria non può dichiarare le variabili di istanza aggiuntive ...

Riferimento: here.

+0

Che cosa dovrei usare per aggiungere una nuova variabile di dati alla classe? – Dmitry

+0

Devi sottoclasse se – aleroot

+0

Voglio usare la classe modificata con il nome della classe originale. – Dmitry

Problemi correlati