Переменная экземпляра 'переменная', доступная в ошибке метода класса - PullRequest
17 голосов
/ 05 ноября 2011

У меня есть переменная, объявленная в заголовочном файле:

@ interface

int _nPerfectSlides;

и

@property (nonatomic, readwrite) int _nPerfectSlides;

, и у меня есть метод, который я объявил вheader:

+ (void) hit;

У метода есть следующий код:

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

теперь по какой-то причине я получаю ошибку "Переменная экземпляра '_nPerfectSlides', доступная в методе класса" ипохоже, я не могу получить доступ к любым переменным внутри метода.Что я делаю не так?

Ответы [ 4 ]

21 голосов
/ 05 мая 2014

1.Для + (void)hit: иметь доступ только к объекту self.

- Шаг 1: Удалить следующую строку из файла заголовка

@property (nonatomic, readwrite) int _nPerfectSlides;

- Шаг 2:

  • Добавить int _nPerfectSlides в ваш файл класса глобально ..
  • Это означает, что объявить перед @implementation

Например: In .m File

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

@implementation Controller

2.Для - (void)hit: иметь доступ только к методам экземпляра

20 голосов
/ 05 ноября 2011

Если вы намеревались сделать этот метод экземпляром, измените это + на -.

7 голосов
/ 05 ноября 2011

Переменная экземпляра, как следует из ее названия, доступна только в методах экземпляра (объявленных с -). Методы класса (объявленные с +) не имеют доступа к переменной экземпляра, не более чем имеют доступ к объекту self.

3 голосов
/ 03 ноября 2014

Я знаю, что это старый, но он все еще подходит. Попробуйте сделать это статичным. Вот я немного изменяю код, чтобы увеличить его.

// 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...