0
이 코드는 NSOutlineView에서 target-action 클릭으로 실행됩니다. 목표는 NSOutlineView에서 새 클릭을 통해 새 요청을 시작하기 전에 각 요청 (원래 웹 서비스 요청)을 완료하는 것입니다. 이 작동하지만 현재 비동기 호출이 끝날 때까지 UI가 세 번째 클릭에 응답하지 않게됩니다. 내가 누락 된 것?action-target 함수에서 runloop runmode를 사용하여 비동기 호출을 기다립니다.
- (void) showMarket:(NSString *)market sender:(id) sender {
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (loadingMarket);
loadingMarket = true;
NSLog(@"loading market %@", market);
[sender beginProgress:self];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"loaded market %@", market);
[sender endProgress:self];
loadingMarket = false;
});
}