2011-11-04 20 views
16

ho una variabile dichiarata nel file di intestazione:grado variabile 'variabile' accessibile per errore metodo di classe

@interface

int _nPerfectSlides; 

e

@property (nonatomic, readwrite) int _nPerfectSlides; 

e ho un metodo che Ho dichiarato nell'intestazione:

+ (void) hit; 

Il metodo ha il seguente codice in esso:

+ (void) hit { 
    NSLog(@"hit"); 
    _nPerfectSlides = 0; 
    [_game showHit]; 
} 

ora per qualche motivo ho l'errore errore e "istanza '_nPerfectSlides' variabile letta nel metodo di classe" sembra non posso accedere a qualsiasi variabile all'interno del metodo . Che cosa sto facendo di sbagliato?

risposta

20

Se si intendeva rendere questo un metodo di istanza, modificare quello + in -.

+0

Sì, l'ho provato prima di postare, ha risolto questo problema ma quando provo a chiamare il metodo da un'altra classe si blocca ... cosa devo fare? –

+5

Creare un'istanza della classe e chiamare il metodo di istanza su quell'istanza ... – Arkku

+6

Sembra che non abbia colto i concetti chiave di OOP. Hai documenti assimilati come questo? http://www.otierney.net/objective-c.html – Cyrille

7

Una variabile di istanza è, come suggerisce il nome, accessibile solo nei metodi di istanza (quelli dichiarati con -). I metodi di classe (dichiarati con +) non hanno accesso alla variabile di istanza, non più di quanto abbiano accesso all'oggetto self.

+0

ok quindi come posso creare un metodo di classe per accedervi da altre classi mentre ho accesso alle variabili di istanza? –

+3

Non capisco il tuo commento. O cambi il tuo '+ (void) hit' in un' - (void) hit, o dichiari '_nPerfectSlides' a livello globale, al di fuori della tua classe '' @ interface'. – Cyrille

17

1. Per+ (void)hit: accesso solo all'oggetto self.

- Fase 1: Rimuovere follwing riga dal file di intestazione

@property (nonatomic, readwrite) int _nPerfectSlides; 

- Fase 2:

  • Aggiungi int _nPerfectSlides nel file di classe a livello mondiale ..
  • Quello significa dichiarare prima @implementation

Esempio: In .m File

#import "Controller.h" 
int _nPerfectSlides // Add like this before @implementation 

@implementation Controller 

2. Per- (void)hit: hanno accesso solo ai metodi di istanza

3

So che questo è vecchio, ma si tratta ancora in piedi. Prova a renderlo statico. Ecco che sto alterando il codice un po 'per farlo incrementare.

Problemi correlati