预期的标识符或'''在'{'标记之前

时间:2012-02-27 18:38:48

标签: objective-c class cocos2d-iphone

我宣布:

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 个答案:

答案 0 :(得分:6)

错误是添加{&amp;您的类别中包含}个字符,因为类别不能包含iVar。

如果您的类别需要iVar,请考虑使用相关对象:

#import <objc/runtime.h>

...

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

...

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

有关关联对象的更多信息,请查看here

答案 1 :(得分:1)

理查德说;您无法在类别中添加iVars,这是编译器警告/错误的来源。

但是,这里有一些更微妙的东西。

如果要覆盖CCSprite的行为,则应使用子类,而不是类别。通过使用类别,您将改变应用程序中所有CCSprite的行为,这不太可能是您想要的行为(问问自己;如果您的程序有一个使用了一些不符合要求的UI元素会发生什么? the-box cocos2d - 或第三方 - 依赖于现有CCSprite触摸行为的UI?)