-[NSApplication beginModalSessionForWindow:]
и друзья должны сделать трюк:
NSModalSession session = [NSApp beginModalSessionForWindow:modalWindow];
while (1) {
if ([NSApp runModalSession:session] != NSRunContinuesResponse)
break;
// do stuff
}
[NSApp endModalSession:session];
Обратите внимание, что, как правило, хорошей идеей является делать свои "вещи" в фоновом режиме, то есть с помощью Grand Central Dispatch.