Cocos2d MenuItem选择器和访问实例变量

时间:2010-10-07 13:17:09

标签: iphone objective-c cocos2d-iphone

我在实现文件中声明了一个实例变量,可以使用synthesize

定义的属性进行访问
@synthesize myProperty

现在,我想在cocos2d库的MenuItem的Selector事件中分配这个属性。您可以将其视为在回调函数中访问myProperty。出于某种原因,每当我访问该属性时,它都说“属性超出范围”。所以我试图分配访问self.myProperty工作!!

但是现在我在self.myProperty中有内存泄漏。如果我在dealloc中释放self.myProperty,那么它会抛出一个异常,说我也有myProperty版本。

更新1 :(代码)

NSString *声音;

@property(nonatomic,retain)NSString * voice; @synthesize的声音;

-(void)repeatAlphabet:(id)sender 

{
 *// I cannot access the voice variable in this function.* 

[[SimpleAudioEngine sharedEngine] playEffect:[[voice lowercaseString] stringByAppendingString:@".caf"]]; 
}

-(void) addRepeatButtonOnScreen 

{

CCMenuItemImage * menuItem1 =[CCMenuItemImage itemFromNormalImage:@"image1.png"

selectedImage: @"image2.png"

  target:self

selector:@selector(repeatAlphabet:)];

CCMenu *menu = [CCMenu menuWithItems:menuItem1,nil]; 

menu.position = ccp(30, 450); 

[self addChild:menu]; 


}

1 个答案:

答案 0 :(得分:0)

假设您已经定义了与您的属性相对应的ivar,也称为myProperty,并且您的属性为retaincopy:在您的dealloc中,您应该[myProperty release];而不是{{1 }}。

更新:经过讨论并显示更多代码......“超出范围”可能是未保留应保留的值的症状。例如,字符串[self.myProperty release]不会保留(并且将超出范围),使用value = @"Value"self.value = @"Value"修复。