Objective c 在操作目标函数中使用runloop runmode等待异步调用
我在NSOutlineView的目标操作单击中运行了此代码。目标是在通过新单击NSOutlineView开始新请求之前完成每个请求(最初是一个web服务请求)。这是可行的,但是在当前异步调用完成之前,UI在第三次单击时会变得无响应。我错过了什么Objective c 在操作目标函数中使用runloop runmode等待异步调用,objective-c,cocoa,grand-central-dispatch,Objective C,Cocoa,Grand Central Dispatch,我在NSOutlineView的目标操作单击中运行了此代码。目标是在通过新单击NSOutlineView开始新请求之前完成每个请求(最初是一个web服务请求)。这是可行的,但是在当前异步调用完成之前,UI在第三次单击时会变得无响应。我错过了什么 - (void) showMarket:(NSString *)market sender:(id) sender { do { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunL
- (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;
});
}
从同一个currentRunLoop调用currentRunLoop完全不是一个好主意。我不认为它是可重入的。对串行任务使用串行调度队列。看一看