我在头文件中声明了一个变量:
@interface
int _nPerfectSlides;
和
@property (nonatomic, readwrite) int _nPerfectSlides;
我有一个我在标题中声明的方法:
+ (void) hit;
该方法包含以下代码:
+ (void) hit {
NSLog(@"hit");
_nPerfectSlides = 0;
[_game showHit];
}
现在由于某种原因我得到错误“在类方法中访问的实例变量'_nPerfectSlides'错误,似乎我无法访问方法中的任何变量。我做错了什么?
答案 0 :(得分:21)
<强> 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
:只能访问实例方法
答案 1 :(得分:20)
如果您打算将其设为实例方法,请将该更改为 - 。
答案 2 :(得分:7)
正如其名称所示,实例变量只能在实例方法(使用-
声明的方法)中访问。类方法(使用+
声明)无权访问实例变量,只能访问self
对象。
答案 3 :(得分:3)
我知道这是旧的,但它仍然会出现。试着把它变成静态的。这是我改变代码以使其递增。
// 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;
}