Мне нужно получить некоторые данные из базы данных для отображения на экране. Я хочу избежать блокировки приложения, поэтому я показываю следующий экран, прежде чем извлекать какие-либо данные и добавлять данные по мере их поступления.
Это метод, который добавляет нужную мне информацию на экран:
- (void)initInfo
{
CGSize winSize = [[CCDirector sharedDirector] winSize];
CCMenu *infoMenu;
// get the info in seperate thread since it may block
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
infoMenu = [PlayerInfoHelper generateInfoForPlayerWithId:[PlayerManager sharedInstance].activePlayer.objectId tag:-1 sender:self];
dispatch_async(dispatch_get_main_queue(), ^{
if (infoMenu != nil) {
infoMenu.position = ccp(winSize.width - kSSInfoPaddingX, winSize.height - kSSInfoPaddingY);
[self addChild:infoMenu z:zIndex++]; // (1)
}
});
});
}
Метод generateInfoForPlayerWithId:tag:sender: может блокироваться, поэтому я поместил его в отдельный поток. Я добавляю меню в основной поток, так как это UI-обновление.
Я уверен, что infoMenu является правильным объектом CCMenu*.
Я получаю EXC_BAD_ACCESS, когда не комментирую строку, обозначенную // (1).
UIView
и т. д.), есть ли код дляaddChild::
? Вы пытались сделатьinfoMenu
свойствомstrong
? Или попробовалNSLog([infoMenu description])
, чтобы проверить, что он тоже содержит то, что вы хотите? - person Sam Clewlow   schedule 03.08.2012