2012-03-21 24 views
1

SVProgressHUD進行状況インジケータを実装しようとしています。私は[デモ]のクラスをコピーしました。 1アクティビティインジケータがSVProgressHUDで表示されない

アプリが読み込まれますが、アクティビティインジケータが表示されません。これは私の初めてのこれらのいずれかを使用しようとしているので、任意の助けに感謝します。ここで

は、コードは次のとおりです。あなたがビューにあなたのSVProgressHUDを追加しなかったすべての

#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]; 
} 
+0

あなたが表示し、それを追加しましたか? –

+0

私はそれが上記のfinishedLoadingメソッドでaddSubViewのもので行われたと思いました。 – jroyce

+0

私はあなたを得ませんでした。それが追加されたか、それともサブビューに追加するのを忘れていたのですか? –

答えて

0

まず。

クラスがUIViewControllerから継承されている場合は、[self.view addSubview:];あなたのクラスがシンプルなUIViewの場合は[self addSubView:];

私はあなたの要件を理解していませんが、私はあなたのコードを通じてあなたが[SVProgressHUD show]を見ていることを理解できます。あなたのstartLoadingメソッドで、あなたは[SVProgressHUD dismiss]を使ってあなたのハドを隠しているそのメソッドでloadInBackgroundメソッドを呼び出しています。

ブレークポイントを使用してトレースすることをお勧めします。

+0

おかげで、コメントの議論が長くなるのを避けるために、回答セクションにそれを書かなければならなかった。それは今働いていますか? –

+0

太字部分は完全なナンセンスなので、私は答えを下げました。あなたが実際にSVProgressHUDを使ったことはないようです。 – Marc

+0

@MarcMosby問題ありません。しかし、あなたは私の完全なナンセンスについて言及しませんでした。あなたが何も使っていないなら、この論理がどのようにそれを知っているとは思わないでしょう。 –

5

同様の問題が発生している他の人にとっては、実行に時間がかかる長いループやコードがあるために起こります。これが起こった場合、あなたの進捗バーはループの後まで表示されませんが、これは目的を破るものです。

- (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]; 
} 

を、バックグラウンドスレッドであなたがこれに必要なこの問題を解決するために

実行したいメソッドが呼び出されます。これにより、コードが実行されるのと同時にUIが更新されます(進捗状況が表示されます)。

+0

おかげさまで、これは私には分かりませんでした。 :) – huggie

0

私は同じ問題がありました。 SVProgressHUDのバージョンを後のバージョンに変更したとき、問題は消えました。私の現在のバージョンはARCをサポートしています。

0

=>

(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]; 

}