0

这个问题让我困惑了好几天。我有一个 NSString,'spriteType'。它是使用属性和综合方法声明的。在创建字符串的层中,我还创建了一个 CCNode。该节点是在一个方法中创建的。

- (void) spritePick {

CCMenuItemImage *go = [CCMenuItemImage itemFromNormalImage:@"button_go.png" selectedImage:@"button_go_selected.png" target:self selector:@selector(test)];
spritePickMenu = [CCMenu menuWithItems:go, nil];
spritePickMenu.position = ccp(0,0);

spritePick = [CCNode node];
[spritePick addChild:spritePickMenu];
spritePick.position = ccp(240,160); 
[self addChild: spritePick];
}

从按钮调用的“测试”方法很简单:

- (void) test {
NSLog(@"%@",spriteType);
}

NSLog 行使我的游戏崩溃,并给出错误:EXC_BAD_ACCESS

除了“测试”方法之外的任何地方,代码都可以正常工作。为什么从节点调用该方法时它会给我错误,但从其他任何地方调用它时它不会给我它?

如果需要,我可以给你完整的代码。

4

1 回答 1

1

您在spriteType属性声明中使用了哪些属性?

如果您的项目使用 ARC,则标题应如下所示:

@property (nonatomic, strong) NSString *spriteType;

虽然实现应该如下所示:

@synthesize spriteType = spriteType_;

如果您以这种方式声明/合成您的属性,则NSLog(@"%@", self.spriteType)只需将 (null) 写入控制台(我测试过以仔细检查)。

self.使用而不是尝试直接访问支持 ivar来访问您的属性是一个很好的做法。

由于您看到 EXC_BAD_ACCESS 我假设您没有保持对self.spriteType.

如果您的项目使用 ARC,则需要确保使用 LLVM 3.0 或更高版本进行编译,如本答案中所述。

于 2012-05-31T15:53:43.733 回答