我正在尝试使用以下代码
通过menuitem传递NSStringCCMenuItem * buyButton = [CCMenuItemLabel itemWithLabel:buyLabel target:self selector:@selector(buyItem:)];
buyButton.userData = (__bridge void *)((NSString*)(itemName));
到以下选择器
-(void) buyItem:(CCMenuItemLabel*)sender {
NSString * itemName = (NSString *)sender.userData;
}
但我在选择器中崩溃了。我正在使用启用了arc的cocos2d,因此是userdata分配中的桥接器。 (kobold2d)。任何想法?
答案 0 :(得分:5)
你的实际崩溃问题是:
NSString * itemName = (NSString *)sender.userData;
看看它,你在这里投了什么?右:您将sender
投射到NSString*
,然后您向发件人(CCMenuItemLabel)发送userData
消息。 BAM!
拯救的支架:
NSString * itemName = (__bridge NSString *)(sender.userData);
另外,为什么在有userObject时会让它过于复杂?
buyButton.userObject = itemName;
userObject是id
类型,不需要桥接,userData为void*
并且需要桥接
答案 1 :(得分:0)
试试这个,它的工作
CCMenuItem * buyButton = [CCMenuItemLabel itemWithLabel:buyLabel target:self selector:@selector(buyItem:)];
NSString *userDataString = [NSString stringWithFormat:@"kidnim"];
buyButton.userData = (__bridge void *)userDataString;
CCMenu *menu = [CCMenu menuWithItems:buyButton, nil];
menu.position = ccp(240, 160);
[self addChild:menu];
和buyItem功能:
-(void) buyItem:(CCMenuItemLabel*)sender {
NSString * itemName = (__bridge NSString*)sender.userData;
printf("NSString: %s\n", [itemName UTF8String]);
}
你会得到Out put as
NSString:kidnim