在Cocos2D中使用块创建菜单操作会导致该场景的SIGABRT
方法出现init
错误:
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];
答案 0 :(得分:0)
论坛帖子引用Kobold2D。但是,如果您将cocos2d构建到静态库中,同样的问题也适用,尽管不会有任何.xcconfig文件。在这种情况下,您必须-force_load your cocos2d lib才能使用CCMenu块,方法是将其添加到Build Settings中的“Other Linker Flags”部分。
需要注意的另一个问题当然是您的部署目标必须设置为iOS 4.0或更高版本。块在iOS 3.x中不可用。
答案 1 :(得分:0)
现在似乎答案是:即使在cocos2d lib上使用-force_load,块也存在问题。我会非常高兴有一天我可以接受这个问题的不同答案。