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

时间:2009-09-10 18:07:06

标签: cocoa reload nsoutlineview

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

现在我正在做的是:

  1. 我使用for循环手动保存大纲视图的状态,如果项目处于展开状态,则保存该项目。

  2. 调用NSOutlineView的reloadData函数

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

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

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

    由于

2 个答案:

答案 0 :(得分:0)

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

这种方法(或一些更深入的相关方法)改进了10.6。实际上有一个NSAssert,但是当你在启动时在awakeFromNib中加载节点时,由于泄漏处理'不一致异常'的正确异常处理程序,感觉就像崩溃一样。

答案 1 :(得分:0)

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