2011-11-04 136 views
16

我有在头文件声明的变量:实例变量“变量”类方法错误访问

@interface

int _nPerfectSlides; 

@property (nonatomic, readwrite) int _nPerfectSlides; 

,我有一种方法,其我在标题中声明:

+ (void) hit; 

的方法中有如下代码:

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

现在由于某种原因,我得到的错误“实例变量‘_nPerfectSlides’类方法访问”错误,它好像我不能访问该方法中的任何变量。我究竟做错了什么?

回答

20

如果您打算将此作为实例方法,请将其更改为 - 。

+0

是的我试过,在发布之前,它解决了这个问题,但是当我尝试从另一个类调用方法时,它崩溃了......我该怎么办? –

+5

创建该类的实例并调用该实例的实例方法... – Arkku

+6

您似乎没有理解OOP的核心概念。你是否已经吸收了像这样的文档? http://www.otierney.net/objective-c.html – Cyrille

7

顾名思义,实例变量只能在实例方法中使用(使用-声明)。类方法(用+声明)不能访问实例变量,只能访问self对象。

+0

好吧,所以如何创建一个类方法来访问它从其他类,而我有权访问实例变量? –

+3

我不明白你的评论。你可以将'+(void)hit'变成' - (void)hit',或者在全局级声明'_nPerfectSlides',而不是你的类'@inter'。 – Cyrille

17

1.对于+ (void)hit:只能访问self对象。

- 第1步:删除头文件follwing线

@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:只能访问实例方法

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