我在NSOutlineView的目标操作点击中运行此代码。目标是在从NSOutlineView上的新点击开始新请求之前完成每个请求(最初是Web服务请求)。这样可行,但在第三次单击时UI将无响应,直到当前异步调用完成。我缺少什么?
- (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;
});
}
答案 0 :(得分:1)
从同一个currentRunLoop调用currentRunLoop完全不是一个好主意。我不认为它是可重入的。使用串行调度队列进行串行任务。看看the Apple document。