Ваш цикл while
while (/*condition*/) {
[NSThread sleepForTimeInterval:x];
}
не позволит обновить ваш пользовательский интерфейс.Ваш пользовательский интерфейс будет обновляться только после возврата метода pushButton: .
Вместо опроса я бы посоветовал вам начать использовать асинхронную модель событий:
Добавитьделегат вашего объекта ревертера
@protocol ReverterDelegate <NSObject>
- (void) reverterProgressDidUpdate:(float)progress;
@end
@interface Reverter : NSObject {
id<ReverterDelegate> delegate;
}
@property(assign) id<ReverterDelegate> delegate;
@end
Зарегистрируйте класс контроллера в качестве делегата вашего ревертера
reverter.delegate = self;
и обработайте это событие
- (void) reverterProgressDidUpdate:(float)progress {
// update ui
}
В фоновом потоке отправляйте события в основной поток
- (void) revertFirmware {
// once in a while send notifications of progress updates
if ([self.delegate respondsToSelector:@selector(reverterProgressDidUpdate:)]) {
[self.delegate performSelectorOnMainThread:@selector(reverterProgressDidUpdate:) withObject:[NSNumber numerWithFloat:progress] waitUntilDone:NO];
}
}
Убедитесь, что вы сохранили свой ревертер где-нибудь и отпустите его, когда он заработает.Теперь вы используете метод push-кнопки : .Также это всего лишь предложение к лучшей модели.Вместо использования executeSelectorInBackground вы могли бы взглянуть на NSOperation и NSOperationQueue, например.