1

我正在尝试使用NSoutlineViewreloadItemreloaditem:reloadchildren函数在大纲视图中重新加载特定项目,但它会使我的整个应用程序崩溃。请您告诉我一个解决方法,就像我也尝试折叠该项目并再次展开它,但它没有重新加载该项目及其子项。

现在我正在做的是:

  1. 我正在使用 for 循环手动保存大纲视图的状态,并在项目是否处于展开状态时保存项目。

  2. 调用 NSOutlineView 的reloadData函数

  3. 然后使用保存的状态,运行一个 for 循环来展开之前展开的所有项目。

但是这种方法有很多性能开销。这种方法还有其他解决方案吗?

有什么方法可以自动保存大纲视图的状态并重新加载并再次设置该状态?这些 autosaveExpandedItems 和 setautosaveExpandedItems 方法有什么作用?

谢谢

4

2 回答 2

0

如果您在重新加载过程正在进行时尝试重新加载节点,这是 10.6 中的常见行为。

此方法(或一些更深层次的相关方法)在 10.6 中得到了改进。实际上有一个 NSAssert,但是当您在启动时加载 awakeFromNib 中的节点时感觉就像是崩溃,因为处理“不一致异常”的适当异常处理程序泄漏。

于 2009-09-12T09:31:32.107 回答
0

可能是同步问题,尝试在 reloadItem 周围使用 NSLock 或 @synchronize。请问可以附上这个问题的一些来源吗?

于 2011-11-11T18:52:13.557 回答