macos - 如何知道 NSTableView 何时完成(重新)加载其内容?

标签 macos cocoa nstableview

我有一个看起来与邮件应用程序类似的用户界面。左侧的表格 View 带有单列项目。当选择左侧的其中一项时,有关该项目的详细信息将显示在右侧。

当我的应用程序中发生某些需要重新加载左 TableView 中的数据的事件时,当前选择将丢失,然后右侧详细 View 和左侧主视图不同步。

我希望解决这个问题的方法是,当需要重新加载表数据时,我会: 1. 保存当前选择的项目 2.重新加载表数据 3. 处理委托(delegate)方法或通知,让我知道重新加载何时完成。 4. 通过在表中的新项目列表中查找正确的项目来重新选择该项目。

不幸的是,我找不到任何方法来确定表何时完成重新加载。有没有。有什么方法可以解决这个问题,或者b。这个问题有更优雅的解决方案吗?

谢谢。

<小时/>

更新:如果我的问题不清楚,请想象您在邮件应用程序中并且选择了一些消息。该摘要单元格在左侧显示为选定状态,而消息的详细信息显示在右侧。假设收到新邮件,并在表格顶部显示为新单元格。您当前正在查看的消息是如何保留而不是取消选择的?

最佳答案

reloadData 是一把大锤。 10.7 提供了更好的解决方案。

当您要添加新行时,请使用 insertRowsAtIndexes:withAnimation: ,而不是使用 reloadData 。当您有要删除的行时,请使用 removeRowsAtIndexes:withAnimation: 。当然,如果现有行已更改,则可以使用 reloadDataForRowIndexes:columnIndexes

这些应该会记住您的选择(至少 iOS 上的等效项会记住)。

如果您无法以 10.7 为目标,其他一些建议可能会有所帮助。 noteNumberOfRowsChanged 也可能有帮助,但我没有实际使用它。

关于macos - 如何知道 NSTableView 何时完成(重新)加载其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13502416/

相关文章:

cocoa - 使用 Cocoa (OS X) 进行内存中 mime 类型检测?

PostgreSQL 无法创建任何 TCP/IP 套接字的 Mavericks

objective-c - 使用 objc_setAssociatedObject 将 ivars 添加到类别

objective-c - 如果组合框动态添加了新的表格行,那么当 NSComboBox 选择发生更改时,我如何收到通知?

core-data - 为什么将删除的行作为 NSFetchedResultsControllerDelegate 处理时 NSTableView 会崩溃?

python - 使用 Python 填写 Excel 文件的简单方法

java - 无法在我的 Mac 上安装 Java 1.8

objective-c - Cocoa:类 'Driver' 的实现不完整

macos - 使用 NSArrayController 过滤单列 NSTableView

macos - 使用 CoreData 支持的 NSArrayController 在 NSTableView 中创建组行