Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在操作目标函数中使用runloop runmode等待异步调用_Objective C_Cocoa_Grand Central Dispatch - Fatal编程技术网

Objective c 在操作目标函数中使用runloop runmode等待异步调用

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

我在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;
    });




}

从同一个currentRunLoop调用currentRunLoop完全不是一个好主意。我不认为它是可重入的。对串行任务使用串行调度队列。看一看