青色のオブジェクト ボックスを使用して、NSOutlineView の制御を委任できるようにしたいと考えています。青色のオブジェクト ボックスはプライマリ コントローラーに接続されるため、単なるデータ ソースとなり、NSOutlineView のコンテンツを制御します。
私が抱えている問題は、Channel Data Source を制御できないことです。内部にいくつかのテスト 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;
}
「Channel Data Source」の青いオブジェクトボックスは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
、それは間違いなく呼び出されません。
アイデア?