-[NSRunLoop runUntilDate:]
に電話するのは良い考えですか?それは何の問題もなく動作するようですが、実行ループ内から実行するように実行ループに指示するのは緊張しています。- [NSRunLoop runUntilDate:]を呼び出すのがいいですか?
さらに詳しい情報:
私は今のプロジェクトを持っていることは、RESTサービスからデータをフェッチしています。入手が必要な重要な情報の1つは、有効なデータを持つ日付の範囲です。これは一度だけ取得する必要がある非常に小さなデータですので、ローカル変数がnil
の場合は、プロパティをデータにダウンロードさせることをお勧めします。私はASIHTTPRequest
とASINetworkQueue
を使用していますので、デフォルトではすべてが非同期であり、これを機能させるには、データがダウンロードされて処理されるまでこのプロパティを返すことができません。ここに私のコードの概要ですが、変数の名前は無実を保護するために変更されました:
__block BOOL isWorking = YES;
__block ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:/*actual URL*/] autorelease];
[request setCompletionBlock:^{
// set local variable
isWorking = NO;
}];
[request setFailedBlock:^{
// show alert to user
isWorking = NO;
}];
[queue addOperation:request];
while (isWorking) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
は繰り返しますが、これは正常に動作しているようです。このアプローチを使用する際に潜在的な問題はありますか?
ので、この場合には、それが聞こえますこのプロパティはデータのダウンロード中に使用中です。しかし、ユーザーが忙しい間にボタンを押してそのプロパティを再度呼び出すことができた場合、それは爆発するだろうか?知っておいてよかった。 –
このプロパティは、UIメソッドまたはデリゲートによって直接的または間接的に使用されますか?もしそうなら、それはまだ大きな問題です。 – hotpaw2
私はUIがユーザーに提示される前に、アプリケーションが最初に読み込まれるときにこのコードが一度しかヒットしないだろうと確信しています。その後、データはそこにあり、ローカル変数を使用します。何らかの理由でデータをダウンロードできない場合は、ユーザーにモーダルアラートを表示し、正常にダウンロードされるまでアプリに入ることはできません。 –