Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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 如何使用异步数据加载NSTableView?_Objective C_Cocoa_Asynchronous_Nstableview - Fatal编程技术网

Objective c 如何使用异步数据加载NSTableView?

Objective c 如何使用异步数据加载NSTableView?,objective-c,cocoa,asynchronous,nstableview,Objective C,Cocoa,Asynchronous,Nstableview,我对Cocoa/Objective-C相当陌生,所以希望我错过了一些东西。这似乎是一种相当普遍的情况。这就是Mac应用程序的全部功能 我有一个NSTableView,它是委托实现的 -(NSView *)tableView:(NSTableView *)table viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 及 我遇到的问题是,我加载到列中的数据是通过web服务的异步调用和NSStreamDelegate

我对Cocoa/Objective-C相当陌生,所以希望我错过了一些东西。这似乎是一种相当普遍的情况。这就是Mac应用程序的全部功能

我有一个
NSTableView
,它是委托实现的

-(NSView *)tableView:(NSTableView *)table viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row

我遇到的问题是,我加载到列中的数据是通过web服务的异步调用和
NSStreamDelegate
的委托方法收集的。显然,此时我无法返回我的列视图,因为我还没有正确设置的数据

我尝试过使用下面的代码,但由于它位于主线程上,因此有时似乎会将其锁定

...
NSDate *loopUntil = [NSDate dateWithTimeIntervalSinceNow:0.1];
while (!callDone && [[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:loopUntil])
    loopUntil = [NSDate dateWithTimeIntervalSinceNow:0.1];

return rslt;
还有其他人必须处理这种情况吗


谢谢

我还没有尝试过,但我认为您应该能够创建一个空数组(或字典,无论您需要什么来构造数据),当应用程序首次打开时,您的表视图将为空(但我认为它不会崩溃)。下载数据后,将其添加到空数组中,并在表视图上调用reloadData。

这个问题(和答案):是针对iPhone的,它提供了一些非常好的信息。
...
NSDate *loopUntil = [NSDate dateWithTimeIntervalSinceNow:0.1];
while (!callDone && [[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:loopUntil])
    loopUntil = [NSDate dateWithTimeIntervalSinceNow:0.1];

return rslt;