According to Apple's documentation on NSRunLoop:
Run Loop Modes
NSRunLoop defines the following run loop mode.
extern NSString* const NSDefaultRunLoopMode;
extern NSString* const NSRunLoopCommonModes;
Constants NSDefaultRunLoopMode The mode to deal with input sources other than NSConnection objects.
I noticed that you've used NSDefaultRunLoopMode for what appears to be NSConnection objects, although without seeing the rest of your code I'm really just speculating. Another thing you could try using is performSelector:onThread:withObject:waitUntilDone:
, for it's possible one of your connections is caught in a race condition perhaps.