在类方法错误中访问的实例变量'variable'

时间:2011-11-04 23:28:49

标签: objective-c

我在头文件中声明了一个变量:

@interface

int _nPerfectSlides;

@property (nonatomic, readwrite) int _nPerfectSlides;

我有一个我在标题中声明的方法:

+ (void) hit;

该方法包含以下代码:

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

现在由于某种原因我得到错误“在类方法中访问的实例变量'_nPerfectSlides'错误,似乎我无法访问方法中的任何变量。我做错了什么?

4 个答案:

答案 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;
}