Variable de instancia ‘variable’ accede en el método de clase de error

Tengo una variable declarada en el archivo de encabezado :

@interfaz

int _nPerfectSlides;

y

@property (nonatomic, readwrite) int _nPerfectSlides;

y tengo un método que yo he declarado en el encabezado :

+ (void) hit;

El método tiene el siguiente código en ella :

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

ahora, por alguna razón, me sale el error «variable de Instancia ‘_nPerfectSlides’ accede en el método de clase de error» y parece que es de los que no puedo acceder a ninguna de las variables dentro del método. ¿Qué estoy haciendo mal?

4 Kommentare

  1. 20

    Si se pretende hacer de este un método de instancia, el cambio que de + a -.

    • Sí he intentado eso antes de publicar, se corrigió este problema, pero cuando trato de llamar a un método de otra clase que se bloquea… ¿qué voy a hacer?
    • Crear una instancia de la clase y llamar al método de instancia en esa instancia…
    • Usted parece que no han comprendido los conceptos fundamentales de la programación orientada a objetos. Se adaptó docs como este? otierney.net/objective-c.html
    • tienes razón, soy nuevo en la programación orientada a objetos tbh, utilizado para estructurada de codificación. Estoy leyendo un par de docs alrededor de la red y tratando de averiguar y también la forma de mi programación orientada a objetos. pero gracias de todos modos
  2. 21

    1. Para + (void)hit:Sólo tienen acceso a la self objeto.

    Paso 1: Quitar siguiente línea del archivo de encabezado

    @property (nonatomic, readwrite) int _nPerfectSlides;

    Paso 2:

    • Agregar int _nPerfectSlides en el archivo de clase a nivel mundial..
    • Que significa declarar antes de @implementation

    Por Ejemplo: En .m File

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

    2. Para - (void)hit:Sólo tienen acceso a la métodos de instancia

  3. 7

    Una variable de instancia es, como su nombre lo indica, sólo es accesible en los métodos de instancia (las declaradas con -). Los métodos de la clase (declarado con +) no tienen acceso a la variable de instancia, no más que la que ellos tienen acceso a la self objeto.

    • ok, así que ¿cómo puedo crear un método de la clase para acceder a ella desde otras clases, mientras que yo tengo acceso a las variables de instancia?
    • No entiendo tu comentario. Ya sea que usted cambie su + (void) hit en un - (void) hit, o declarar _nPerfectSlides a nivel mundial, fuera de la clase @interface.
  4. 3

    Sé que esto es viejo, pero todavía viene. Tratar de hacer un estático. Aquí estoy alterando el código un poco, para hacer increment.

    //Hit.h
    
    #import <Foundation/Foundation.h>
    @interface Hit : NSObject
    + (void)hit;
    @end
    
    //Hit.m
    
    #import "Hit.h"
    @implementation Hit
    static int val = 0;
    + (void)hit {
        val += 1;
        [self showHit];
    }
    + (void)showHit {
        NSLog(@"hit value: %d", val);
    }
    @end
    
    //main.m
    
    #import <Foundation/Foundation.h>
    #import "Hit.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            [Hit hit];
            [Hit hit];
            [Hit hit];
        }
        return 0;
    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea