Никогда не показывать и не изменять элементы интерфейса в фоновом потоке. Если вы работаете в фоновом потоке и хотите что-то сделать в основном потоке, вы можете использовать селектор:
[self performSelectorOnMainThread:@selector(doSomething:)
withObject:someObject
waitUntilDone:NO];
или вы можете использовать GCD (мой любимый):
dispatch_async(dispatch_get_main_queue(), ^{
[self doSomething:someObject];
});
Независимо от того, какой метод вы используете, просто убедитесь, что если вы загружаете свои данные в фоновом потоке, а затем пытаетесь загрузить представление из этого фонового потока, всегда выполняйте этот вызов в основном потоке, иначе вы получите странный поведение вы упомянули.