Работает ли API, который выбирает данные, синхронно? Я готов поспорить, что это так.
Пользовательский интерфейс будет обновляться только в конце цикла выполнения, запущенного в главном потоке. Если API, который обрабатывает выборку, выполняется в том же потоке, то все закончится так:
- Begin Run Loop
- Вы выбираете индекс табуляции 0
- Вы получаете данные.
- Вы выбираете вкладку указатель 1
- Обновляется пользовательский интерфейс, отображается индекс вкладки 1.
Вам, вероятно, нужно запустить процедуры извлечения данных в фоновом потоке. Затем, когда он возвращает данные, скажите NSTabView выбрать индекс вкладки 1. Поскольку выборка данных происходит в фоновом режиме, цикл выполнения будет иметь возможность обновлять пользовательский интерфейс более одного раза, что должно привести к тому, что индекс вкладки 0 станет видимым (для короткое время в любом случае).
Вы можете запустить выборку данных в фоновом режиме, используя несколько различных методов. Очевидными являются использование Grand Central Dispatch или вы также можете использовать серию методов "executeSelectorInBackground:", которые являются частью протокола NSObject.
Также вы должны ВСЕГДА быть очень осторожными в отношении того, какие операции вы выполняете в главном потоке. Получение данных с веб-сайта может занять некоторое время. Если вы выполняете эту операцию синхронно в главном потоке, пользовательский интерфейс будет полностью не реагировать, пока вы ждете завершения этой выборки данных. Apple говорит об этом в своей документации по многопоточности. Определенно стоит прочитать. Это и Grand Central Dispatch - это значительно упрощает многопоточность.