2012-07-25 2 views
1

는 그래서 같은 CCMenuItemToggle 두 CCMenuItemImage 객체를 추가 해요 :CCMenuItems 느슨한 태그

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

kSoundEnabledkSoundDisabled이 값 2와 3에 열거 항목이다 나는 각 CCMenuItemImage의 태그를 로그인 할 때 내가 만든 후 그들 모두 다 괜찮아. 그러나 블록 안에 기록하면 태그는 -1061138431로 표시됩니다.

블록 외부에서 로그에 기록하려고 할 때, 내 레이어의 초기화 코드에서 더 이상 아래쪽으로 잘못 기록하기 시작합니다.

아무도 문제가 무엇인지 알고 있습니까? ARC 지원 프로젝트 인 Kobold2d가 여기 ARC가 될 수 있습니까? 나는 이것이 NSInteger와 같은 단순한 데이터 형을 설명하지 않을 것이라고 생각했다.

나는 단지 sender.selectedIndex = 0 또는 sender.selectedIndex = 1을 확인할 수 있지만 여전히 문제가 무엇인지 이해하고 싶습니다.

답변

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 
    { 
    //... 
    } 
}]; 
+1

나는이 문제에 대한 수정을 최선을 다하고 있습니다. ;) –