【问题标题】:NSTableView guarantee data displayNSTableView 保证数据展示
【发布时间】:2011-08-13 11:32:15
【问题描述】:

我的应用程序的主 GUI 有一个 NSTableView,由它自己的控制器类控制。此类通过启动和解析进程的输出将数据加载到表中一次。这是在

-(void)awakeFromNib

控制器类的方法。该表在启动时立即显示,因此这意味着在显示 GUI 之前,应该完成对进程输出的解析。

现在的问题是,当显示 GUI 时(我的应用启动速度很慢,这意味着该进程已启动),表格有时为空或有时加载了数据。这是随机的。 那么如何让表格在启动时始终加载数据?

reloadData 不起作用!我也使用[NSTask waitUntilExit];

【问题讨论】:

  • 您能否解释一下您是如何通过绑定或委托向您的表提供数据的?

标签: cocoa process nstableview


【解决方案1】:

这就是我经常在窗口显示之前让应用“完全加载”的方式:

取消选中 Interface Builder 中窗口的“启动时可见”。然后在您的 AppDelegate 中创建一个IBOutlet NSWindow *window;。最后,在您的 AppDelegate 中,实现applicationDidFinishLaunching: 方法并将[window makeKeyAndOrderFront:self]; 添加到此方法中。

这应该可行,因为applicationDidFinishLaunching: 将始终在awakeFromNib 之后调用。

【讨论】:

  • 不!突然间,我重新测试了我的应用程序,但它无法正常工作 - 仍然是一个随机的空表(我现在正在使用此方法显示窗口,已确认)
  • 你确定 makeKeyAndOrderFront 是你在 applicationDidFinishLaunching 中做的最后一件事吗?另外,如果您现在摆脱 makeKeyAndOrderFront,窗口会停止显示吗? (只是想确定一下,以防你偷偷溜进了其他地方的某个窗口。)
  • 没有makeKeyAndOrderFront,窗口不会出现,这是applicationDidFinishLaunching中唯一的东西
  • 那我恐怕不知道发生了什么事。我唯一能想象的是,您使用 performSelector:withObject:afterDelay: 或 dispatch_async 将一些延迟的工作放在不同的线程中。这可能会导致这样的事情发生。除此之外,我完全没有想法:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多