【问题标题】:NSTableview refresh asynchronous loading of dataNSTableview 刷新异步加载数据
【发布时间】:2015-05-14 11:09:25
【问题描述】:

我有一个 NSTableView 与 XIB 中的 NSArrayController 挂钩。在我的应用程序中,我异步加载数据并连续调用[_arrayController addObject:someNewObject]。我原以为这会更新 NSTableView,但我必须在前景/背景之间切换应用程序才能看到更新。

所以我尝试通过添加以下语句之一让 NSTableView 在每个 addObject 上刷新自己

  • [_tableView reloadData]
  • [_tableView setNeedsDisplay:YES]
  • [_tableView display]

但是,NSTableView 在前台运行时不会自行刷新。

有什么想法吗?

【问题讨论】:

  • 你试过insertObject:atArrangedObjectIndex:NSArrayController方法吗?
  • addObject 应该可以工作,我刚刚尝试了一个沙盒项目,不同之处在于我在 NSString 而不是任意应用程序域对象上操作。所以不确定是否需要对绑定做些什么。
  • 更正,它适用于应用程序域对象。我尝试使用 dispatch_after:..: 哪个有效,这让我认为这些更新必须在主踏板上执行(?)

标签: objective-c cocoa nstableview cocoa-bindings


【解决方案1】:

在交流电上尝试rearrangeObjects,但请注意it's not synchronous

所以,addObject 然后rearrangeObjects 然后dispatch_async 执行任何依赖于 tableView 显示新对象的代码。链接问题/答案中的示例。

【讨论】:

  • 我做了以下事情:异步调度主队列上的 addObject。如果连接速度很慢,不确定atm是否会导致麻烦。但这将是未来的问题。我会根据 dispatch_async 提示接受你的回答:)。
  • 是的,我假设 addObject 已经在主线程上。 dispatch_async 肯定对实现它很有用。
【解决方案2】:

您应该使用 Flux 架构并做出反应。

您创建数据存储,将数据存储在那里,然后创建对存储更改做出反应的订阅者。

这里有很棒的教程:http://www.raywenderlich.com/74106/mvvm-tutorial-with-reactivecocoa-part-1

【讨论】:

  • OP 尝试使用 cocoa-bindings 找到解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 2014-02-09
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多