2012-04-10 12 views
0

私のアプリケーションウィンドウには2つのNSViewがあります。左側にはNSView( "メニュー")にいくつかのボタンがあります。ボタンの1つをクリックすると、右側のNSView( "コンテンツ")の内容が変更されます。NSViewにサブビューを追加すると表示されますが、削除することはできません

右側の各ビューについて、ロードされたNSViewControllerが別々にあり、ビューがサブビューとして追加されます。さらにボタンが左に押されると、右側の追加されたサブビューは削除され、新しいビューはサブビューとしてロードされます。これを実現するために

私は、次のとAppDelegateの私のメニューをロード:

MenuVC *menuSubView = [[MenuVC alloc] initWithNibName:@"MenuVC" bundle: nil]; 
    menuSubView.contentView = (NSView*)[self contentView]; 
    [[self menuView] addSubview:[menuSubView view]]; 

これが正常に動作します。あなたが見ることができるように、私はNSViewのポインタをメニューVCに置いて、サブビューを設定できるようにcontentViewを指しています。

Now]ボタンを押すのいずれかの方法として、私は、次の手順を実行します。

SomeContentVC *subView = [[SomeContentVC alloc] initWithNibName:@"SomeContentVC" bundle:nil]; 
    [self.contentView addSubview:[subView view]]; 

これは動作しません。

ただし、MenuViewController実装のawakeFromNibメソッドからサブビューを追加した場合(デフォルトのコンテンツの場合は、アプリケーションを開くと表示されます)、機能します。しかし、そのサブビューを削除しようとすると、

[[self.contentView setSubviews:[NSArray array]]; 

私はできません。面白いのは、(たとえawakeFromNibメソッドに1つ追加した後でも)サブビューの数を数えようとすると、self.contentViewに0個のサブビューが返されるということです。どうして?どうすればそれを正しく動作させることができますか?メッセージングself.contentViewは0を返し、いくつかのもののため、除いて何も達成していないことを

おかげ

+0

self.contentViewとは私の知る限り、あなた自身で作成していない限り、NSViewControllerにはこのようなプロパティはありません。 – Vervious

+0

AppDelegateでは、これは正しいNSView(私のアプリケーションのコンテンツ部分)を指すNSViewポインタです。 MenuVCには、作成時にAppDelegateから読み込まれたNSViewポインタもあります.AppDelegateのポインタを渡して、メインアプリケーションウィンドウに正しいNSViewを読み込むことができます。たぶんこれはhttps://lh5.googleusercontent.com/-rsaZ6LZLeqM/T4PCBu-z43I/AAAAAAAAAAo/wS9__tdNxmo/s798/Screen%2520Shot%25202012-04-10%2520at%252007.13.39.png – Joseph

答えて

1

事実は、おそらくself.contentViewがnilであることを意味します。

偶然、MenuVCのインスタンスが2つありますか?おそらく、NIBでインスタンス化され、コードでインスタンス化されたインスタンスですか?

疑問がある場合は、すべてを記録してください。さまざまな方法でログself。作成した直後にmenuSubViewを記録してください。あなたが割り当てた直後にログmenuSubView.contentView。その他最終的には、あなたが思っていたものとは異なるオブジェクトとやり取りしていることが分かります。

+0

に役立ちます私はまだMenuViewControllerのNIBにNSObjectを持っていました...ありがとう! – Joseph

関連する問題