Не вижу моего AlertView, если я не прокомментирую автоматическое увольнение

StackOverflow https://stackoverflow.com/questions/8304336

Вопрос

Я реализую простой оповещение с индикатором активности, чтобы показать пользователю, в то время как приложение выполняет восстановление базы данных. Все в порядке, за исключением того, что я не вижу представления о предупреждении, если я не комментирую строку автоматического увольнения (последний здесь).

Хорошо, восстановление базы данных довольно быстрое, но все же я ожидаю увидеть это, даже если на мгновение, не так ли? Я вижу, что экран становится немного темнее во время анимации, но это все. Я также попытался поместить петлю, чтобы продлить время, время продлевается, но все еще не предупреждает.

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

Прежде чем кто -то это скажет, я попытался изменить делегат AlertView на self как опубликовано здесь, но это не помогло.

// First we prepare the activity indicator view to show progress indicator
UIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

[activityView setFrame:CGRectMake(121.0f, 50.0f, 37.0f, 37.0f)];
[activityView startAnimating];

// Then we put it in an alert view
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Loading" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
[alertView addSubview:activityView];
[alertView show];

// Finally we operate the restore
[[SQLManager sharedSQL] restoreDatabase:[restoreDatabaseURL path]];

// And we can dismiss the alert view with the progress indicator
[alertView dismissWithClickedButtonIndex:0 animated:NO];
Это было полезно?

Решение

Я не уверен Почему Это происходит, но я тоже иногда сталкиваюсь с этим. Один из способов, которым я получил что -то подобное, - это использование performSelector:withObject:afterDelay: На следующем звонке, как это:

// First we prepare the activity indicator view to show progress indicator
UIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

[activityView setFrame:CGRectMake(121.0f, 50.0f, 37.0f, 37.0f)];
[activityView startAnimating];

// Then we put it in an alert view
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Loading" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
[alertView addSubview:activityView];
[alertView show];

// Finally we operate the restore
// [[SQLManager sharedSQL] restoreDatabase:[restoreDatabaseURL path]];
[[SQLManager sharedSQL] performSelector:@selector(restoreDatabase:) withObject:[restoreDatabaseURL path] afterDelay:0.25];


// And we can dismiss the alert view with the progress indicator
[alertView dismissWithClickedButtonIndex:0 animated:NO];

performSelector Документация

Другие советы

Похоже, он прекращает себя почти мгновенно. Если вы добавите для цикла, он, вероятно, заморозит все другие вычисления, что означает, что ваша активность не будет отображаться, пока петля не сломается.

Вы можете попробовать использовать NSTIMER, чтобы вызвать другую функцию, чтобы определить, является ли восстановление завершено или нет;

// Setup our the timer
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                  target:self 
                                                selector:@selector(checkRestore)
                                                userInfo:nil
                                                 repeats:YES];


// Timer function checking for completion
-(void)checkRestore {
    if (restore is complete) {
        [alertView dismissWithClickedButtonIndex:0 animated:NO];
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top