Obj-C, потокобезопасный процесс с предупреждением / индикацией прогресса в представлении, может быть вызван из applicationWillEnterForeground <= iOS4? - PullRequest
0 голосов
/ 13 марта 2012

Мне нужно запустить некоторую обработку базы данных, когда мое приложение запускается один раз в день.

Я решил сделать это в своем первом виде и показал предупреждение с индикатором активности. Я попытался использовать NSThread detachNewThreadSelector для запуска обработки БД. В конце функции я использовал dismissWithClickedButtonIndex, чтобы закрыть вид предупреждения.

Затем я вызвал контроллер представления с applicationWillEnterForeground, если разрешенная дата.

Однако я получаю сообщение об ошибке Tried to obtain the web lock from a thread other than the main thread or the web thread. Crashing now в строке dismissWithClickedButtonIndex.

Я считаю, что это происходит из-за недостатка в использовании объекта, такого как представление предупреждений с потоком.

Мне нужно, чтобы это было совместимо с iOS 4.

Может кто-нибудь указать мне альтернативный подход?

1 Ответ

1 голос
/ 13 марта 2012

Вы не сможете создавать и работать непосредственно с UIAlertView в фоновом потоке.

Вот скелетное представление о том, что вы можете сделать:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
//  create your progress indicator in your alert view
[alertView show];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
      //  do your db update
      dispatch_async(dispatch_get_main_queue(), ^{
           //  update your alert view here.
      });
});

Идея состоит в том,выполнить обработку в фоновой очереди и вернуть сообщение в основную очередь для объектов, которые являются только основными потоками (например, UIAlertView.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...