Было бы хорошо, если бы вы могли прояснить вопрос, потому что трудно понять, что именно вы хотите сделать и в чем проблема. В общем, код пользовательского интерфейса должен всегда работает в основном потоке. Это четко указано в документации Cocoa, и вам не удастся несколько потоков, пытающихся контролировать пользовательский интерфейс.
Если вы хотите запустить код в других потоках и повлиять на его интерфейс, вам необходимо реализовать механизмы для передачи информации в основной поток. Один метод, который пригождается является NSObject-х
performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
Если вы хотите использовать уведомления, вы должны направить их на основной поток также. Легко получить путаные ошибки, если вы не придерживаетесь этого принципа (хотя, возможно, сначала все работает).