2012-03-19 2 views
0

В Cocos2D с помощью блоков, чтобы создать действие меню вызывает ошибку SIGABRT в init метод, который сцены:Cocos2d MenuItemLabel с использованием блоков вызывает 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 вещь)

Edit: вот примеры кода, которые я пробовал после установки "-force_load $ (BUILT_PRODUCTS_DIR) /" в OTHER_LINKER_FLAGS:

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

У меня были проблемы с блоками в menuItem, которые препятствовали правильному выпуску элемента, когда родитель освобожден. Мое предложение состояло бы в том, чтобы не использовать блок в MenuItems на данный момент и придерживаться цели: selector: – Ultrakorne

+0

@Ultrakorne yep, вот в чем проблема, которую я описываю. Я надеюсь решить эту проблему. В то же время, да, я использую этот способ обхода. – buildsucceeded

ответ

0

Кажется, что прямо сейчас ответ: Блоки проблематичны, даже если вы используете -force_load на cocos2d lib. Я буду очень счастлив за тот день, когда есть другой ответ, который я могу принять по этому вопросу.

0

Форум пост относится к Kobold2D. Но эта же проблема возникает, если вы создаете cocos2d в статической библиотеке, хотя не будут никаких файлов .xcconfig. В этом случае вам понадобится -force_load your cocos2d lib, чтобы использовать блоки CCMenu, добавив это в раздел «Другие флаги компоновщика» в настройках сборки.

Еще одна проблема, о которой следует помнить, - это, конечно, что ваша цель развертывания должна быть установлена ​​на iOS 4.0 или выше. Блоки недоступны в iOS 3.x.

+0

Спасибо за это - попробовал, но все равно получаю SIGABRT всякий раз, когда я использую блок. (Редактирование сообщения для предоставления кода, так как оно не будет корректно отформатировано здесь.) – buildsucceeded

Смежные вопросы