Как бросать блоки в и из пустоты *

Итак, я пытаюсь передать блок какNSAlert contextInfo параметр.

[myAlert beginSheetModalForWindow: theWindow
                    modalDelegate: myAlert
                   didEndSelector: @selector(alertDidEnd:returnCode:contextInfo:)
                      contextInfo: (void *) aBlock];

и вернуть его на другом конце:

void (^responseBlock)() = (__bridge_transfer void (^)()) contextInfo;

Который работает, в некоторой степени. До моего звонкаbeginSheetModalForWindow:... АБлок в0x00007fff610e1ec0и в ответ (alertDidEnd:...), contextInfo находится в0x00007fff610e1ec0.

Тем не менее, когда я пытаюсь вызвать блок:

responseBlock();

Я получаю следующую ошибку

error: called object type '__block_literal_generic *' is not a function or function pointer
error: 1 errors parsing expression

Как правильно бросить блоки вvoid *ради простого переноса?

Edit: Полный код попытки, используя методы приведения, предложенные в ответах. Теперь я получаю сообщение об ошибке EXC_BAD_ACCESS наresponseBlock(); вызов.

- (void)alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
{
    void (^responseBlock)() = (__bridge typeof(responseBlock)) contextInfo;

    switch (returnCode)
    {
        case NSCancelButton:
        {
            break;
        }

        case NSOKButton:
        {
            responseBlock();
            break;
        }
    }
}

Other Notes: Когда используешь__bridgeадрес памятиresponseBlock а такжеcontextInfo отличаются, тогда как с__bridge_transfer, они одинаковые. Ни один не облегчает проблему EXC_BAD_ACCESS.

WORKING:
[myAlert beginSheetModalForWindow: theWindow
                    modalDelegate: myAlert
                   didEndSelector: @selector(alertDidEnd:returnCode:contextInfo:)
                      contextInfo: (__bridge_retained void *) [aBlock copy]];

и позже...

void (^responseBlock)() = (__bridge_transfer typeof(responseBlock)) contextInfo;

Ответы на вопрос(1)

Ваш ответ на вопрос