Индикатор активности не отображается с SVProgressHUD - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь реализовать индикатор активности прогресса SVProgressHUD.Я скопировал класс из [демо]. 1

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

Вот код:

#import "SVProgressHUD.h"

@implementation QuotesAppDelegate

- (void)startLoading 
{
    //call this in your app delegate instead of setting window.rootViewController to your main view controller
    //you can show a UIActivityIndiocatorView here or something if you like
    [SVProgressHUD show];
    [self performSelectorInBackground:@selector(loadInBackground) withObject:nil];
}

- (void)loadInBackground
{ 
    //do your loading here
    //this is in the background, so don't try to access any UI elements
    [self populateFromDatabase];

    [SVProgressHUD dismiss];

    [self performSelectorOnMainThread:@selector(finishedLoading) withObject:nil waitUntilDone:NO];
}

- (void)finishedLoading
{
    //back on the main thread now, it's safe to show your view controller
    [window addSubview:[navigationController view]];
    [window makeKeyAndVisible];
}


- (void)applicationDidFinishLaunching:(UIApplication *)application {

    [self copyDatabaseIfNeeded];

    [self startLoading];
}

Ответы [ 4 ]

5 голосов
/ 07 сентября 2012

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

Для решения этой проблемы вам необходимо следующее:

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

Ваш код будет выглядеть примерно так:

- (IBAction)submitPost:(id)sender {
    //now we show the loading bar and submit the comment
    [SVProgressHUD showWithStatus:@"Submitting post" maskType:SVProgressHUDMaskTypeGradient];
    SEL aSelector = @selector(submitDataOfPost);
    [self performSelectorInBackground:aSelector withObject:sender];
}

Это в основном загрузит индикатор выполнения, и в фоновом потоке будет вызван метод, который вы хотите выполнить. Это гарантирует, что пользовательский интерфейс обновляется (показывает ход выполнения) одновременно с выполнением вашего кода.

0 голосов
/ 22 октября 2013

=>

(IBAction)fetchData:(id)sender 
    {    

            [SVProgressHUD showWithStatus:@"Loading..." maskType:SVProgressHUDMaskTypeGradient];
            [self performSelectorOnMainThread:@selector(getDataFromSomeWhere) withObject:nil waitUntilDone:NO];
        }

=>

(void)getDataFromSomeWhere
{

      //Do your data populating here. and dismiss the ProgressHud.
     [SVProgressHUD dismiss];

}
0 голосов
/ 12 июня 2013

У меня была такая же проблема.Когда я изменил версию SVProgressHUD на более позднюю, проблема исчезла.Моя текущая версия поддерживает ARC.

0 голосов
/ 21 марта 2012

Прежде всего, вы не добавляли SVProgressHUD в представление.

Если ваш класс унаследован от UIViewController, то [self.view addSubview:]; или если ваш класс простой UIView, то [self addSubView:];

Я не понимаю ваших требований, но насколько я могу понять из вашего кода, который вы показываете [SVProgressHUD show]; в вашем методе startLoading, а затем вы вызываете метод loadInBackground в этом методе, где вы скрываете свой hud, используя [SVProgressHUD dismiss];

Я предлагаю вам проследить это с помощью точки останова и выяснить это.

...