The problem is quite simply that the block you're using doesn't conform to the expected interface. The CCCallBlock
action expects a block with no parameters, but you defined the block as receiving a parameter (the node). I'm surprised that this even compiles. Of course the node passed in will be a garbage pointer and crash when accessed.
To fix this use CCCallBlockN
whose block takes a CCNode*
pointer as parameter:
CCCallBlockN *actionDone = [CCCallBlockN actionWithBlock:^(CCNode *node){
// ...
}];