質問: [result[@"result"] boolValue]; } dispatch_semaphore_signal(semaphore); }]; // ブロックの完了を待つ dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); return needUpdate; } ``` もし原因わかる方いましたらご教授お願いします。
回答: AFNetworkingのsessionManagerのGET処理は Block構文内の処理を **メインスレッド** での処理として流しているため、 `dispatch_semaphore_signal(semaphore);`が実行されません。 上記ソースコードで言うところの`if (error) { ...`以降が実行されていません。 これは、 `dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);` を実行することで、スレッド上の処理を停止しているためです。 よって、処理の終了を確認できないため、 `dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);` より後ろの処理を実行することはできません。 解決方法ですが、 セマフォは使わずに、 **デリゲート** もしくは **Block構文** を使ってみてはいかがでしょうか? 少しでも参考になれば幸いです。