Я запускаю обновление базы данных Sqlite3 в фоновом режиме, когда пользователь нажимает кнопку обновления силы.UI не обновляется на фоновом потоке
Я хочу отключить кнопку, чтобы не блокировать базу данных и не нажимать ее снова и снова. Кроме того, я хочу показать индикатор активности. Однако кнопка не отключается, и индикатор активности не отображается.
Что я делаю неправильно?
Скрыть индикатор активности, когда изображение загружено.
Построенный с раскадровки:
Посмотреть сделал нагрузки
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//other going on
[self updateUIInterface:false];
}
метод для обновления пользовательского интерфейса
- (void) updateUIInterface : (BOOL) updating {
if (updating) {
//Disable buttons and show activity indicator
self.actLocalDB.hidden = NO;
[self.actLocalDB startAnimating];
self.btnSyncLocal.enabled = NO;
[self.btnSyncLocal setTitle:@"Updating.." forState:UIControlStateDisabled];
[self.btnSyncLocal setUserInteractionEnabled:NO];
} else {
// Enable buttons
self.actLocalDB.hidden = YES;
[self.actLocalDB stopAnimating];
self.btnSyncLocal.enabled = YES;
[self.btnSyncLocal setTitle:@"Sync Databases" forState:UIControlStateDisabled];
[self.btnSyncLocal setUserInteractionEnabled:YES];
}
}
Мой метод обновления БД
- (IBAction)syncLocalDB:(id)sender {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"Begin Local DB Sync");
[self updateUIInterface:true];
//db stuff goes here
dispatch_async(dispatch_get_main_queue(), ^{
//update UI here
NSLog(@"Done updating local db");
[self updateUIInterface:false];
});
});
}
Вы не можете обновить представление из фоновой темы. Переместите 'updateUIInterface' из dispatch_async. – gabuh
Хороший лорд. Вот и все. Примите один взнос. –