私はiPadのiOSの8のためのアプリに取り組んでいる、と私は私のアプリからの回答を待つ行う必要があります。このメソッドは、3つのループの内側にある"for"ループは非同期応答を待つ。 OBJ-CのIOS
[directions calculateETAWithCompletionHandler:^(MKETAResponse *response, NSError *error) {}]
。私はdispatch_semaphore_t
を試しましたが、この行の後にアプリを続行できません:
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_group_t
で試したところ、同じ結果が得られました。 私は何か間違っていると思いますが、私は何がわかりません。私は同様の問題についてSOを検索しようとしましたが、何も見つかりませんでした。誰かが私がこれをどのように達成できるか説明できますか?
-(void)setTimesMissions {
for (Driver *d in self.dataList) {
for (Period *p in d.periods) {
for (Mission *m in p.missions) {
MKDirections *directions = ....
// HERE i want the for loop stop until this completionHandler finish
[directions calculateETAWithCompletionHandler:^(MKETAResponse *response, NSError *error) {
//and when he finish here continue
}];
}
}
}
}
をdispatch_semaphore_wait使用がループしてスレッドに影響のみ関連する部分にあなたのコードのサンプルを下にペアリングを検討してください。余分な "毛羽"があるので、あなたが尋ねていることを正確に伝えることが難しくなります。 – Stonz2
あなたは間違った方法で待っています。アプリを待たせたい場合は、UIにアクティビティインジケータを表示します。**スレッドをブロックしない**。完了ハンドラを使用して、操作が完了したときに実行する必要のある操作を実行します。 – Sulthan
アクティビティインジケータ私はまだ試してみた – NLU