2016-03-26 17 views
0

要求中にサブアクティビティインジケータを表示するコードを実装しようとしました。それは読み込みに使用されることを意図していますが、別のセグに行って戻ったときにインジケーターが表示されてもまだ表示されません。これは私の関数は、サブビューを表示する必要がない時間で実行されるまで、私はスーパーがリロードされないと考えています非同期要求時に表示するアクティビティインジケータをロードする

例:

loadingIndicator.startIndicator(self.view)

 let parameters = Parameters() 

     parameters.addParams(search: search) 
     let request = SearchRQ(parameters: parameters) 

     request.getResponse() 

     while !request.isComplete 
     { 
      //Wait 
     } 

     let results = request.parseResponse() 
     self.results = results 

     loadingIndicator.stopIndicator(self.view) 

     performSegueWithIdentifier("showSearchResults", sender: sender) 
+0

を表示することができました。 – rmaddy

答えて

1

mattが述べるように、メインスレッド上のビュー(またはその点に関するUI変更)にアクティビティインジケータを追加する必要があります。

あなたはそうのようにそれを行うことができます:それは完了ハンドラを持つようにあなたのGetResponse機能を変更、メインスレッドを離れてあなたの応答を待って移動するには

dispatch_async(dispatch_get_main_queue(),{ 
    self.view.addSubview(activityIndicator) 
}) 

。 :

func getResponse(responseReceived:() ->Void) { 
    // Once I get my response: 
    responseReceived() 
} 

次に、回答を受け取った後で適切な変更を行うことができます。

getResponse { 
    let results = request.parseResponse() 
    self.results = results 

    loadingIndicator.stopIndicator(self.view) 

    performSegueWithIdentifier("showSearchResults", sender: sender) 
} 
+0

私はこれを試して、動作するようには見えない場合は、おそらく説明する助けになるでしょう – Mokugo

+0

ああ、私はあなたのメインスレッドをブロックしていると思いますwhile!request.isCompleteブロック。それまであなたのアプリは凍結されます。 –

+0

そうですね、これを回避する方法はありますか。申し訳ありませんが、愚かな質問 – Mokugo

0

はあなたの非同期の活動を行うためにメインスレッドを表示し、活動の指標を起動し、オフをステップするためにメインスレッドにステップする必要があります。

+0

あなたはこれの例がありますか? :) – Mokugo

+0

スタックオーバーフローで検索してみてください。 _lots_の例があります。 – matt

+0

私はそれを見つけることができるかどうか確認します – Mokugo

0

は最後に次のコードでは、働いて、あなたの質問は、該当するコードを更新/非表示

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {() -> Void in 

      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       //Display my activity indicator 
      }) 

      //Create XML Request, Parse Response 

      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       //Hide activity indicator 
       //Perform Segue 
      }) 


     } 
関連する問題