Objective c 如何使用异步数据加载NSTableView?
我对Cocoa/Objective-C相当陌生,所以希望我错过了一些东西。这似乎是一种相当普遍的情况。这就是Mac应用程序的全部功能 我有一个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
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;