1

私のドキュメントアプリケーションでは、MyDocument.xibで参照したNSArrayControllerをサブクラス化し、そのコンテンツをFileのOwner.entriesにバインドしました。

エントリは、次のようにMyDocumentクラスの属性として公開するNSArrayです。

@interface MyDocument : NSDocument {
    NSArray *entries;
}

-(NSArray *)entries;
-(void)setEntries:(NSArray *)newEntries;
@end

これは完全に正常に機能します。良い。

これで、NSWindowControllerを介してNSMenuItemを介して開く別の.xib、CSVEntries.xibを設計しました。これも、スムーズに機能します。

この新しいウィンドウにMyDocument.entriesインスタンスのコンテンツをNSTableViewに表示させる方法がわかりません。

私は多くのことを試しましたが、基本的に問題は、CSVEntries.xibに配置したNSArrayControllerをMyDocument.entriesにバインドできないことです。CVSEntries.xibファイルの所有者がMyDocument以外の何かを参照しています(これは論理的だと思います)。

また、CVSEntries.xibを開くNSWindowControllerにNSArrayインスタンスのコピーを追加しようとしましたが、ユーザーがメニューをクリックしたときにのみウィンドウがインスタンス化されるため、空の配列になってしまいました。

インターネットで検索しましたが、適切な答えが見つかりませんでした。問題に対処する適切な方法を見つけたいと思います。2つのウィンドウが相互に通信でき、共通の親(NSApplicationインスタンス)にアクセスできると確信していますか?

すべての初心者の質問、私は知っています:)

アップデート

私はどこを見るべきかを理解したと思いますが、それでもどのようにすべきかはわかりません。2番目のウィンドウのファイルの所有者がMyDocumentであることを確認する必要があると思いますが、NSWindowController initWithWindowNibName:owner:MyDocumentインスタンスを所有者として指定する方法がわかりません。xibファイルでのみ指定するファイルの所有者は十分ではないようです。

アップデート2

うーん...NSDocumentサブクラス(デフォルトはMyDocument)によって両方ともインスタンス化された2つのNSWindowControllerインスタンスが必要だと思い始めています。これらを配置すると、NSWindowControllerの両方がMyDocument.entries NSArrayにアクセスできるようになり、2つのwindowsxibファイルをFileのOwner.entriesにバインドできるようになります。

誰かがこれを確認できますか?ありがとう。

4

1 に答える 1

1

私はここで私自身の質問に答えます。基本的に、私が求めていたものはファイルの所有者が何にバインドされているかに大きく依存していることに気付いたと述べています。私が実装した設計は正しくなかったので、目的を達成するために再設計しています。

とにかくみんなに感謝します、答えがなくても答えです:)

于 2011-05-20T12:02:11.123 に答える