2013-08-22 5 views
0

Я действительно в тупике по этому вопросу, который у меня есть.iOS показать предупреждение после долгого задания

У нас есть приложение, которое позволяет пользователю синхронизировать некоторые фотографии с нашим сервером. Таким образом, я выполнил это с вызовом dispath_async, и он работает, однако я хотел бы сказать пользователю, что он завершил погоду успешно или нет.

Итак, мой вопрос заключается в том, как показать пользователю окно AlertDialog, когда я НЕ знаю, какой вид они будут (поскольку это async, я не хочу, чтобы они оставались на этом ViewController, но перемещались приложение и делать другие вещи, пока они загружаются).

Я пробовал:

[self showAlertView];
, но это приводит к сбою приложения, потому что я больше не в этом представлении.

Чем я пробовал:

 
dispatch_async(dispatch_get_main_queue(), ^{ 
    UIAlertView* alert = [UIAlertView withTitle ....]; // you get the idea, just create a simple AlertView 
    [alert show]; // also tried: [alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:NO]; here and that didn't work either 
}); 

О и LocalNotifications не будет работать, потому что, если они находятся в приложении не обнаружиться (Android имеет IOS бить на этом фронте, было бы намного проще иметь, что просто работать, когда пользователь находится в приложении тоже, тогда мне не придется беспокоиться обо всем этом).

Любые идеи о том, как я могу достичь своей цели.

+0

dispatch_async() должен работать. Вы уверены, что выполнение программы достигает этого блока (т. Е. Если вы поставили там точку останова, остановится ли она)? – Tyler

ответ

4

Вы можете использовать UILocalNotification, даже если приложение работает на переднем плане, но вам придется обрабатывать уведомление самостоятельно. Вы можете просто отобразить простой AlertView.

Просто добавьте к этому классу приложения делегата:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:notification.alertBody message:nil delegate:nil cancelButtonTitle:@"Oke" otherButtonTitles:nil]; 
    [alert show]; 

} 
+0

творит чудеса, спасибо за быстрый ответ. Я вижу, что вы сильны в силе iOS (следовательно, 30k rep) = D. Вы только что сделали мое приложение в миллион раз лучше. еще раз спасибо –

0

Вы можете отобразить вид модальный на текущем контроллере путем доступа к контроллеру через окно вашего приложения.

UIWindow *window = [UIApplication sharedApplication].keyWindow; 
UIViewController *controller = window.rootViewController; 
// Use controller to display your window. 
Смежные вопросы