Вы создали другой поток и вызвали в нем метод UIKit?Методы типа + (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
или - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
создадут новый поток.
Коды, связанные с пользовательским интерфейсом, должны использоваться только в основном потоке.Поскольку во многих кодах пользовательского интерфейса интенсивно используется многопоточность, поэтому возможность вызова кода пользовательского интерфейса из любого потока может легко привести к неуправляемой тупиковой ситуации.Таким образом, большинство каркасов пользовательского интерфейса имеют это правило.
Вы можете принудительно запустить код в основном потоке, используя метод, подобный - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
Например,
- (void)UIControlCode
{
}
- (void)processingCodeInOtherThread
{
[self performSelectorOnMainThread:@selector(UIControlCode) withObject:nil waitUntilDone:NO];
}