2012-02-27 55 views
1

我宣佈:預計標識符或 '(' 前 '{' 令牌

CCSprite + DisableTouch.h文件

#import "cocos2d.h" 

@interface CCSprite (DisableTouch) <CCTargetedTouchDelegate> { 

} 

-(void)disableTouch; 
-(void)enableTouch; 

@end 

而對於CCSprite + DisableTouch.m文件

#import "CCSprite+DisableTouch.h" 


@implementation CCSprite (DisableTouch) 

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    return YES; 
} 

-(void)disableTouch 
{ 
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-1000 swallowsTouches:YES]; 
} 

-(void)enableTouch 
{ 
    [[CCTouchDispatcher sharedDispatcher] removeDelegate:self]; 
} 

@end 

爲什麼我得到:Expected identifier or '(' before '{' token錯誤? 我該如何解決這個問題?

+2

哪一行給出錯誤? – Darren 2012-02-27 18:45:25

+0

@Darren:第一個:'@interface CCSprite(DisableTouch) {',謝謝! – 2012-02-27 18:46:26

回答

6

錯誤是通過將{ & }字符添加到您的類別中,因爲類別不能具有iVar。

如果您需要使用您的類別伊娃,考慮使用相關對象:

#import <objc/runtime.h> 

... 

objc_setAssociatedObject(self, @"iVar", @"value", OBJC_ASSOCIATION_ASSIGN); 

... 

id iVar = objc_getAssociatedObject(self, @"iVar"); 

有關關聯對象的更多信息,請here。正如理查德說的那樣:

1

您不能在類別中添加iVars,並且這是編譯器警告/錯誤的來源。

但是,這裏玩的更精妙些。

如果您打算重寫CCSprite的行爲,您應該使用子類而不是類別。通過使用一個類別,你將會改變你應用程序中所有CCSprite的行爲,這很可能不是你想要的行爲(問問你自己;如果你的程序有一個UI元素,機箱cocos2d - 或第三方 - 依賴於現有CCSprite觸摸行爲的UI?)

相關問題