#objective-c
#objective-c
Вопрос:
У меня есть переменная, объявленная в файле заголовка :
@интерфейс
int _nPerfectSlides;
и
@property (nonatomic, readwrite) int _nPerfectSlides;
и у меня есть метод, который я объявил в заголовке :
(void) hit;
Метод содержит следующий код :
(void) hit {
NSLog(@"hit");
_nPerfectSlides = 0;
[_game showHit];
}
теперь по какой-то причине я получаю ошибку «Доступ к переменной экземпляра ‘_nPerfectSlides’ в методе класса», и кажется, что я не могу получить доступ к каким-либо переменным внутри метода. Что я делаю не так?
Ответ №1:
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
: иметь доступ только к методам экземпляра
Ответ №2:
Если вы хотели сделать это методом экземпляра, измените это на -.
Комментарии:
1. Да, я пробовал это перед публикацией, это устранило эту проблему, но когда я пытаюсь вызвать метод из другого класса, он выходит из строя… что мне делать?
2. Создайте экземпляр класса и вызовите метод экземпляра для этого экземпляра…
3. Вы, кажется, не поняли основные концепции ООП. Вы усвоили документы, подобные этому? otierney.net/objective-c.html
4. @Cyrille вы правы, я новичок в ООП tbh, привык к структурированному кодированию. Я читаю несколько документов по сети и пытаюсь разобраться в этом, а также сформировать свой ООП. но в любом случае спасибо
Ответ №3:
Переменная экземпляра, как следует из ее названия, доступна только в методах экземпляра (объявленных с помощью -
). Методы класса (объявленные с помощью
) не имеют доступа к переменной экземпляра, не более, чем они имеют доступ к self
объекту.
Комментарии:
1. хорошо, итак, как я могу создать метод класса для доступа к нему из других классов, пока у меня есть доступ к переменным экземпляра?
2. Я не понимаю вашего комментария. Либо вы изменяете свой
(void) hit
на- (void) hit
, либо вы объявляете_nPerfectSlides
на глобальном уровне, за пределами вашего класса’@interface
.
Ответ №4:
Я знаю, что это устарело, но оно все еще появляется. Попробуйте сделать ее статической. Здесь я немного изменяю код, чтобы увеличить его.
// 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;
}