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

时间:2012-05-17 03:24:37

标签: objective-c cocoa asynchronous nstableview

我对Cocoa/Objective-C相当新,所以希望我只是错过了一些东西。看起来这应该是一个相当普遍的情况。这适用于Mac应用程序。

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

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

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView

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

我尝试使用以下代码,但因为它在主线程上似乎有时会将其锁定。

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

return rslt;

还有其他人不得不处理这种情况吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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