我正在向CCMenuItemToggle添加两个CCMenuItemImage对象,如下所示:
CCMenuItemImage *soundEnabled = [CCMenuItemImage itemWithNormalImage:@"button_sound_enabled.png"
selectedImage:@"button_sound_enabled.png"];
soundEnabled.tag = kSoundEnabled;
CCMenuItemImage *soundDisabled = [CCMenuItemImage itemWithNormalImage:@"button_sound_disabled.png"
selectedImage:@"button_sound_disabled.png"];
soundDisabled .tag = kSoundDisabled;
CCMenuItemToggle *sound = [CCMenuItemToggle itemWithItems:[NSArray arrayWithObjects:soundEnabled,soundDisabled,nil] block:^(id sender) {
CCMenuItem *item= ((CCMenuItemToggle*).sender).selectedItem;
CCLog(@"item tag: %d",item.tag);
}];
kSoundEnabled
和kSoundDisabled
是值为2和3的枚举项。当我在创建它们之后记录每个CCMenuItemImage的标记时,一切都很好。但是当我在块中记录它们时,标签显示为-1061138431。
此外,当我尝试将它们记录在块之外时,只是在我的图层的初始化代码中进一步向下,它们开始出现错误。
有人知道这里的问题是什么吗?这是一个支持Kobold2d ARC的项目,ARC可能成为问题吗?我认为这不会解释像NSInteger这样的简单数据类型?
我知道我可以查看sender.selectedIndex = 0
或sender.selectedIndex = 1
,但我仍然想了解这里的问题。
答案 0 :(得分:3)
问题不是来自ARC配置或其他。我用Cocos2D 2.0测试了它,我有同样的问题。我查看了源代码,问题来自CCMenuItemToggle,它改变了子代的标签以保持当前显示项的轨迹。
我应该像你那样使用你的变量的引用:
CCMenuItemToggle *sound = [CCMenuItemToggle itemWithItems:[NSArray arrayWithObjects:soundEnabled,soundDisabled,nil] block:^(id sender)
{
CCMenuItem *item= ((CCMenuItemToggle*).sender).selectedItem;
if (item == soundEnabled)
{
//...
} else
{
//...
}
}];