Это действительно заводит меня с ума.UI не обновляется в основной теме
У меня есть кнопка, и если эта кнопка будет затронута, она вызовет метод, который обновляет пользовательский интерфейс. Вот этот метод:
- (void)loadLevelWithImagePath:(NSString *)imagePath difficulty:(int)difficulty modelName:(NSString *)modelName
{
// do stuffs
}
За исключением того, что это не так.
Однако, когда я прилагаю все тело метода в:
dispatch_async(dispatch_get_main_queue(), ^{
// do stuffs
}
Это работает!
Однако я сбив с толку, потому что, когда я устанавливаю точку останова в методе, в соответствии с отладчиком она уже находится в основном потоке. Также если я поставлю эти 2 чека:
- (void)loadLevelWithImagePath:(NSString *)imagePath difficulty:(int)difficulty modelName:(NSString *)modelName
{
NSLog(@"%d", [NSThread currentThread] == [NSThread mainThread]);
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"%d", [NSThread currentThread] == [NSThread mainThread]);
// do stuffs
}
}
Оба возвращают ИСТИННУЮ!
Так что мой вопрос: почему пользовательский интерфейс не обновляется? Большое спасибо!
Покажите нам, как вы обновляете интерфейс, приложите полный код, пожалуйста. –
Я обновил пользовательский интерфейс различными способами: меняя рамки, добавляя представления, устанавливая текст ярлыка и т. Д. Ни один из них не работает за пределами dispatch_async, но когда я помещаю их в dispatch_async, они волшебным образом работают. Пример такого кода: self.nameLabel.text = @ "foo"; – agro1986
Поместите контрольную точку в методы и посмотрите, нет ли 'self.nameLabel' или любого связанного с UI объекта. –