Ответ 1
Если вы хотите сделать это методом экземпляра, измените значение + на -.
У меня есть переменная, объявленная в файле заголовка:
@interface
int _nPerfectSlides;
и
@property (nonatomic, readwrite) int _nPerfectSlides;
и у меня есть метод, который я объявил в заголовке:
+ (void) hit;
В этом методе есть следующий код:
+ (void) hit {
NSLog(@"hit");
_nPerfectSlides = 0;
[_game showHit];
}
теперь по какой-то причине я получаю сообщение об ошибке "Ошибка экземпляра переменной _nPerfectSlides" в классе "и кажется, что я не могу получить доступ к любым переменным внутри метода. Что я делаю неправильно?
Если вы хотите сделать это методом экземпляра, измените значение + на -.
1. Для + (void)hit
: иметь доступ только к объекту self
.
- Шаг 1: Удалите следующую строку из файла заголовка
@property (nonatomic, readwrite) int _nPerfectSlides;
- Шаг 2:
int _nPerfectSlides
в свой файл класса по всему миру.@implementation
Например: В .m File
#import "Controller.h"
int _nPerfectSlides // Add like this before @implementation
@implementation Controller
2. Для - (void)hit
: иметь доступ только к методам экземпляров
Переменная экземпляра, как следует из его имени, доступна только в методах экземпляра (объявленных с помощью -
). Методы класса (объявленные с помощью +
) не имеют доступа к переменной экземпляра, не более, чем к объекту self
.
Я знаю, что это старо, но все равно появляется. Попробуйте сделать его статичным. Здесь я немного изменяю код, чтобы увеличить его.
// 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;
}