Cocos2d MenuItemLabel с использованием блоков вызывает SIGABRT - PullRequest
0 голосов
/ 19 марта 2012

В Cocos2D использование блоков для создания действия меню вызывает ошибку SIGABRT в методе init этой сцены:

 CCLabelTTF *label = [CCLabelTTF labelWithString:@"test" fontName:@"Times" fontSize:12];
 CCMenuItemLabel *toCauseCrash = [CCMenuItemLabel itemWithLabel:label block:^(id sender) {
  NSLog(@"Blocks work?");
}];

Пробовал новейший Cocos2D, ничего. Это сообщение на форуме обещает (а) исправление в ближайшее время и редактирование файла "BuildSettings-iOS.xcconfig" (которого, насколько я могу судить, не существует).

(1) Кто-нибудь знает, как исправить Cocos2D, чтобы разрешить блоки в меню?

(2) Кто-нибудь знает, о каком файле xcconfig идет речь в вышеприведенном посте, или как его найти? (Это вещь из Kobold2d)

Редактировать: вот примеры кода, которые я пробовал после установки "-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];

Ответы [ 2 ]

0 голосов
/ 26 апреля 2012

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

0 голосов
/ 20 марта 2012

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

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

...