在启用ARC的情况下通过ccmenuitem传递userData

kid*_*nim 0 cocos2d-iphone automatic-ref-counting kobold2d

我正在尝试使用以下代码通过menuitem传递NSString

CCMenuItem * buyButton = [CCMenuItemLabel itemWithLabel:buyLabel target:self selector:@selector(buyItem:)];
buyButton.userData = (__bridge void *)((NSString*)(itemName));
Run Code Online (Sandbox Code Playgroud)

到以下选择器

-(void) buyItem:(CCMenuItemLabel*)sender {
   NSString * itemName = (NSString *)sender.userData;
     }
Run Code Online (Sandbox Code Playgroud)

但我在选择器中崩溃了.我正在使用启用了arc的cocos2d,因此是userdata分配中的桥接器.(kobold2d).有任何想法吗?

Lea*_*s2D 5

你的实际崩溃问题是这样的:

NSString * itemName = (NSString *)sender.userData;
Run Code Online (Sandbox Code Playgroud)

看看它,你在这里投了什么?右:你铸造senderNSString*,然后你发送发送者(在CCMenuItemLabel)一userData消息.BAM!

拯救的括号:

NSString * itemName = (__bridge NSString *)(sender.userData);
Run Code Online (Sandbox Code Playgroud)

另外,为什么有userObject时会让它过于复杂?

buyButton.userObject = itemName;
Run Code Online (Sandbox Code Playgroud)

userObject是一种id类型,不需要桥接转换,userData是void*并且需要桥接转换