В моем приложении я хочу отключить обновление моей базы данных, когда я нажимаю кнопку. Поскольку для этой работы требуется некоторое время, а не для того, чтобы заморозить дырочное приложение, я решил использовать NSThread.
Этот процесс можно запустить из разных представлений, поэтому я поместил код обновления в мой делегат приложения. При нажатии на метод обновления у меня есть этот код:
MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:delegate withObject:nil];
В моем делегате:
- (void)startTheBackgroundJob {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//do some stuff here
self.percentageCompleted = (i * 100) / totalChars;
[[NSNotificationCenter defaultCenter] postNotificationName:@"refreshObjectsForUpdate" object:self];
//some other stuff
[pool release];
По сути, в моей теме я хочу обновить различные Прогресс-прогресс с текущим прогрессом. Поэтому я использовал NSNotificationCenter для отправки сообщения после каждого шага в моей теме.
В viewController я ловлю это сообщение и делаю:
MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
double prc = delegate.percentageCompleted;
UILabel *l = (UILabel *)[self.view viewWithTag:444];
l.text = [NSString stringWithFormat:@"%f", prc];
Но он обновляет мой ярлык только в конце потока.
В чем здесь проблема? Могу ли я использовать другой подход для этого?
Спасибо.