我正在为Objective-C中的Mac OS X编写一个System Preference窗格。该面板包含NSOutlineView
绑定到正确配置的NSTreeController
。我还为我的OutlineView
添加了一个委托类,我在其中定义了自己的outlineView:viewForTableColumn:item:
方法。
当我向树控制器添加新对象时,一切正常,但现在我想启用persistence for expanded items。为此,我需要在OutlineView的数据源中实现outlineView:itemForPersistentObject:和outlineView:persistentObjectForItem:,否则我会收到错误:
*** NSOutlineView数据源((null))没有实现outlineView:persistentObjectForItem:
根据我目前的设置,我该怎么做?
答案 0 :(得分:1)
您是否将该类(提供数据的类)声明为NSOutlineViewDataSource?这些方面的东西:
@interface YourClass : NSObject <NSApplicationDelegate, NSWindowDelegate, NSUserNotificationCenterDelegate, NSTableViewDataSource, NSTableViewDelegate, NSOutlineViewDataSource, NSOpenSavePanelDelegate>
*其他声明只是示例,在这种特殊情况下,YourClass继承了其他几个声明。
声明后,您可以使用绑定,也可以手动将数据源连接到outlineView。
答案 1 :(得分:1)
委托和数据源可以是同一个对象。实现OutlineViewDelegate
中的方法,并将数据源连接到与委托相同的对象。