我希望能够使用蓝色对象框来委派对 NSOutlineView 的控制。蓝色对象框将连接到我的主控制器,因此它只是一个数据源并控制 NSOutlineView 的内容。
我遇到的问题是我无法控制通道数据源。我只是调用了一个声明的方法,里面有一些测试 NSLog,它没有被调用。出口没有被实例化。
这是蓝色对象框(ChannelDataSource)的连接
这是我的主控制器的文件所有者的连接。
所以你看,我想做一些事情[dataSource callMyMethod];
,最终目标是我可以控制NSOutlineView
.
有任何想法吗?
编辑
该应用程序的结构使我的主要应用程序委托看起来像这样:
@implementation MyAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
controller = [[MainController alloc] init];
[controller showWindow];
}
@end
然后在MainController
我有以下几点:
@implementation MainController
-(id)init {
self = [super init];
if (self) {
// loads of random stuff
[dataSource myMethod];
}
return self;
}
所以“通道数据源”蓝色对象框是dataSource
. 在应用程序生命周期的这一点上,它是 null,这不是我所期望的。同时,这对我来说还是有点黑魔法。如果你有一个蓝色的对象框,它在什么时候被实例化?显然,这并没有正确连接。
编辑编辑
进一步我上面的观点,并试图解决这个问题,这实际上是一个好方法吗?我认为它不符合一个像样的 MVC 架构,因为最终蓝色对象框的拥有类是存储和管理数据。有没有更好的方法来管理 NSOutlineView 中的内容?
编辑 编辑 编辑
所以我有我的应用程序委托,奇怪的是,它本身就是一个实例化主控制器的类。不要问我为什么这样做,这是非常早期的代码。所以我的应用程序委托(根入口点)有这个:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
controller = [[MyController alloc] initWithWindowNibName:@"MainWindow"];
[controller showWindow:nil]; // this doesn't open the window
[controller loadWindow]; // this does open the window
}
以及控制器的声明:
@interface MyController : NSWindowController
其中包含以下方法声明:
-(void)windowDidLoad {
[dataSource insertChannel:@"test" forServer:@"test2"];
}
我有一个断点windowDidLoad
,它肯定不会被调用。
想法?