如何从NSPageController的arrangeObjects中删除对象?

时间:2014-11-07 16:01:15

标签: objective-c macos

如何动态添加/删除页面控制器中的对象?在应用程序生命周期中,所有示例都在awakeFromNib方法期间设置了arrangeObject属性。

在我的应用程序中,我有NSObjects的NSMutableArray,我使用NSPageController在主窗口中显示。对于每个NSObject,我在委托的 - (NSViewController *) pageController:(NSPageController *) pageController viewControllerForIdentifier:(NSString *) identifier方法中创建相应的ViewController。

在程序执行期间,对象将与可变数组异步添加/删除。 在每个事件中,我将页面控制器的arrangeObjects设置为可变数组以考虑更改 - 显示新对象并停止显示已删除的对象。

添加对象时,一切正常。但是当删除对象时,关联的视图/视图控制器仍保留在内存中。

如何“重置”页面控制器以便忘记删除对象的所有内容?

看起来页面控制器保留已删除对象的视图控制器的引用(快照)。当添加另一个对象时,他们的视图会混乱。

1 个答案:

答案 0 :(得分:0)

尝试在历史模式下使用NSPageController,如此处所述

How do you implement NSPageController to navigate through a webView's history

在这里

https://developer.apple.com/library/mac/documentation/AppKit/Reference/NSPageController_Class/

在这种情况下,您无需实施

pageController:identifierForObject: 

pageController:viewControllerForIdentifier

并且无需设置

arrangedObjects

但你需要打电话

navigateForwardToObject

每次要打开新页面时,此方法都会使NSPageController清除前进历史记录并打开新页面。 还可以使用此方法中的新页面为pageController.view添加新视图。 我也在

中进行了视图替换
didTransitionToObject