2011-08-16 9 views
0

配列にデータがあるまで実行されるループを設定する必要があります。少しの背景情報:アプリケーションはサーバーと通信して情報を取得し、その情報を配列に取り込みます。その情報が配列に移入されたときにのみ、ビューは次のビューに変更されます(ビューに配列の情報が移入されるため)。配列にデータがあるまでループ

どうすればこのループを作成できますか?私は現在NSTimerを使用していますが、私のニーズには適していません。

ありがとうございます! http://allseeing-i.com/ASIHTTPRequest/How-to-useをして

非同期あなたは、メインスレッドをブロックし、応答が戻ってくるのを待つしないことを意味し、非同期部分を探します。

+1

なぜあなたはその配列を忙しく待っていますか?配列を満たすコードブロックが同じで、コントローラーにデータが準備されていることを通知するのはなぜですか? – yan

+2

可能であれば、サーバにasychronusコールバックを設定しようとします。ループを設定すると高価になる可能性があります –

+0

Yan - その配列には、次のビューでラベル/などが入る情報があります。データが準備されているなどの通知はどうすればよいですか? – Baub

答えて

1

私はあなたが本当にまで待機を意味すると仮定します。

最初に、この待機がメインスレッドで行われる場合は、それを忘れて、メインスレッドをブロックしないでください。

ループの代わりに、おそらくロックを使用してその状態を待っているとします。これには、配列が生成されるのを待つコードと配列を生成するコードとの間に共有ロックが必要です。

[sharedLock lockWhenCondition:MYConditionStateNoObjects]; 
// Your stuff to get the objects to add here. 
[sharedArray addObjectsFromArray:theObjectsToAdd]; 
[sharedLock unlockWithCondition:MYConditionStateHaveObjects]; 

と配列されるまで待つ必要があり、受信機がオブジェクトがこれを行うがあります。そして、やるべき配列を移入し

typedef enum { 
    MYConditionStateNoObjects, 
    MYConditionStateHaveObjects 
} MYConditionState; 
... 
sharedArray = [[NSMutableArray alloc] init]; 
sharedLock = [[NSConditionLock alloc] initWithCondition:MYConditionStateNoObjects]; 

あなたの方法:

まず、このような共有状態のロックを作成します:

[sharedLock lockWhenCondition:MYConditionStateHaveObjects]; 
// ... Do something with the objects you got here 
[sharedArray removeAllObjects]; 
[sharedLock unlockWithCondition:MYConditionStateNoObjects]; 
0

次のライブラリを使用して試すことができます。あなたはまでループと言うとき

+0

明白な理由なしにダウン投票することは、駄目です。 – user281300

+0

あなたはなぜ落ち込んでいたのか分かりませんが、私はあなたの応答をまだ見ていません。 – Baub

+0

おそらく誰かの不満。とにかく私はあなたが基本的にWebからデータを引っ張ってきて、何らかの種類のテーブルにデータを取り込もうとしているのですか? 1つの方法は、非同期要求を使用して、受信した接続を調べることです。そこに配列を設定し、テーブルに通知してデータをリロードすることができます。 – user281300

0

私が考えている場合は、データサーバーからサーバーがアレイに追加されました。なぜKVOの機能を使用したくないのですか?配列内容の変更を監視するオブザーバを追加することができます。

関連する問題