NSOutlineView -- reloadItem:reloadChildren: 让我的应用程序崩溃

Posted

技术标签:

【中文标题】NSOutlineView -- reloadItem:reloadChildren: 让我的应用程序崩溃【英文标题】:NSOutlineView -- reloadItem:reloadChildren: crashing my application 【发布时间】:2009-09-10 18:07:05 【问题描述】:

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

我现在正在做的是:

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

    调用NSOutlineView的reloadData函数

    然后使用已保存状态,运行 for 循环以展开之前展开的所有项目。

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

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

谢谢

【问题讨论】:

请编辑您的问题以包含崩溃日志。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于NSOutlineView -- reloadItem:reloadChildren: 让我的应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

编辑 NSOutlineView 项目后使用委托

NSOutlineView 不折叠项目

如何有效地展平 NSOutlineView?

如何遍历我的 NSOutlineView 的所有项目?

更新 NSOutlineView 的内容

动态 NSOutlineView 数据源