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

标签 objective-c cocoa asynchronous nstableview

我对 Cocoa/Objective-C 还很陌生,所以希望我只是错过了一些东西。看起来这应该是一个相当普遍的情况。这就是 Mac 应用程序的全部内容。

我有一个 NSTableView 及其委托(delegate)实现

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

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView

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

我尝试使用以下代码,但由于它位于主线程上,因此有时似乎会锁定它。

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

return rslt;

还有其他人遇到过这种情况吗?

谢谢!

最佳答案

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

关于objective-c - 如何使用异步数据加载 NSTableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10629424/

相关文章:

ios - iCarousel 不显示我的图像 Objective-C

ios - UIImageView 螺旋动画

objective-c - 在 Objective-C 中选择 NSArray 的随机元素

objective-c - 适用于 iOS 的沙子物理学

javascript - 关于异步函数中变量处理的问题。这段代码会导致不一致吗?

iphone - 使用 UIProgressView 倒计时期间的事件处理

objective-c - 如何将上下文相关菜单添加到 NSOutlineView(即右键单击菜单)

cocoa - 从 cocoa 中的 NSView 子类启动窗口

asp.net - 为什么异步 ASHX 生成的图像在 IE6 中并不总是有效?

c# - 如何使用 nunit 测试异步方法