【发布时间】:2012-03-19 11:59:21
【问题描述】:
在 Cocos2D 中,使用块创建菜单操作会导致该场景的 init 方法中出现 SIGABRT 错误:
CCLabelTTF *label = [CCLabelTTF labelWithString:@"test" fontName:@"Times" fontSize:12];
CCMenuItemLabel *toCauseCrash = [CCMenuItemLabel itemWithLabel:label block:^(id sender) {
NSLog(@"Blocks work?");
}];
试过最新的Cocos2D,没有。 This forum post 承诺 (a) 很快会发布一个修补程序,并编辑“BuildSettings-iOS.xcconfig”文件(据我所知,该文件不存在)。
(1) 有谁知道如何修复 Cocos2D 以允许菜单中的块?
(2) 有谁知道上面的帖子说的是什么 xcconfig 文件,或者如何找到它?(那是 Kobold2d 的东西)
编辑:这是我在 OTHER_LINKER_FLAGS 中设置“-force_load $(BUILT_PRODUCTS_DIR)/”后尝试的代码示例:
id blockAction = [CCCallBlock actionWithBlock:^{
NSLog(@"Blocks action");
}];
void (^reusableBlock)(id sender) = ^(id sender) {
NSLog(@"Reusable block");
};
// SIGABRT:
CCMenuItemLabel *menuItem = [CCMenuItemLabel itemWithLabel:myLabel block:blockAction];
// SIGABRT:
CCMenuItemLabel *menuItem = [CCMenuItemLabel itemWithLabel:myLabel block:reusableBlock];
【问题讨论】:
-
我遇到了 menuItem 中的块问题,阻止了在解除分配父项时正确释放该项目。我的建议是暂时不要在 MenuItems 中使用块并坚持目标:选择器:
-
@Ultrakorne 是的,这就是我要描述的问题。我希望能解决问题。与此同时,是的,我正在使用这种解决方法。
标签: ios cocos2d-iphone objective-c-blocks