Мы пытаемся заставить фоновую задачу работать с целью включения индикатора активности на экране рабочего помещения. Насколько мы понимаем, это требует создания фонового потока для его запуска. Я также понимаю, что никакие обновления GUI не могут быть выполнены в фоновом потоке.
Учитывая это, вот общая схема того, что должно произойти.
a.) Предварительная проверка полей. Убедитесь, что пользователь не вводил неверные данные
б.) Настройка фоновой задачи.
c.) Обработка результатов из фоновой задачи
Вот как это выглядит в коде:
-(IBAction)launchtask:(id)sender
{
//validate fields
[self validateFields];
/* Operation Queue init (autorelease) */
NSOperationQueue *queue = [NSOperationQueue new];
/* Create our NSInvocationOperation to call loadDataWithOperation, passing in nil */
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(backgroundTask)
object:nil];
/* Add the operation to the queue */
[queue addOperation:operation];
[operation release];
//TO DO: Add any post processing code here, BUT how do we know when it is done???
ConfirmationViewController *otherVC;
//show confirm
//if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
//{
// otherVC = [[ConfirmationViewController alloc] initWithNibName:@"ConfirmationViewPad" bundle:nil];
//}
//else
{
otherVC = [[ConfirmationViewController alloc] initWithNibName:@"ConfirmationView" bundle:nil];
}
//TO DO: Let's put this in a struct
otherVC.strConfirmation = strResponse;
otherVC.strCardType = strCardType;
otherVC.strCardNumber = txtCardNumber.text;
otherVC.strExpires = txtExpires.text;
otherVC.strCustomerEmail = txtEmail.text;
[self.navigationController pushViewController:otherVC animated:YES];
[otherVC release];
otherVC = nil;
}
Пока что это работает довольно хорошо, за исключением того, что у нас пока нет способа узнать, когда фоновая задача завершена. Только после его завершения мы можем обработать результаты фоновой задачи. Прямо сейчас это не работает, потому что нет синхронизации с этими двумя. Как решить?
Еще одна вещь, заметил, что счетчик теперь отображается в строке состояния. Это хорошо, но кажется, что оно не исчезнет после завершения фоновой задачи? Что делать?
Заранее спасибо.