2016-11-23 4 views
-5

が、私は以下のような単純なwhileループを使用すると、私のアプリのUIがフリーズする一方使用:問題ループ

再び
func viewDidLoad(){ 
    super.viewDidLoad() 
    while(true){ 
    print(CheckDB()); 
    } 
} 

を、1つを持つプログラムは、UIがフリーズするということですが、それは出力んデータ。私はそれを非同期にしようとすると、UIがフリーズせず、データはまだ印刷されていますが、問題は現在UI内にあるスライダを調整しても、番号を印刷するときには何もしません。その時点でUIは機能していますが、それは文字通りUIだけで何もありません。

func viewDidLoad(){ 
DispatchQueue.global(qos: .default).async { 
    while(true){ 
    super.viewDidLoad() 
    print(CheckDB()); 
    } 
} 

だから私の質問は、今、私はアプリの他の部分をめちゃくちゃにすることなく、ラベルのようないくつかのUI要素を更新し、バックグラウンドで実行されている一定のループを持っていないか、でしょうか?

+3

while(true){super.viewDidLoad()...}これまでに決して行ったことはありません。 – luk2302

+0

UIをメインスレッドに更新するコードを送信しますが、これは理論的な例であり、このように真剣にデータベースをポーリングしないことを願っています。 – vadian

+0

スライダーを調整するときにUIを更新しようとしている場合は、プロトコル/デリゲートを使用して、スライダの移動時にUIに更新を通知します。 n秒ごとにUIを更新しようとしている場合は、NSTimerを使用して、パスしたいと思っても数秒後にリフレッシュメソッドを呼び出すことができます。 – user3353890

答えて

1

あなたはうまくいく必要があるいくつかのスレッド問題があるように聞こえますが、これは一般に悪いアプローチです。

DBが変更されたときにUIで何かを変更する必要がある場合は、VCの通知またはリスナ/代理人を使用してください。