1

iOSからMacプログラミングを始めたばかりで、バインディングをいじっていました。

最近選択したディレクトリの履歴を表示する単純なディレクトリポップアップを作成しようとしています。最後の要素が読み取らother...れ、opendialogボックスが開きます。

NSPopupButtonをモデルにバインドする方法がわからないようです。

そのセットアップは次のようになります:MainUIViewController、NSController、NSObjectControllerはすべてnibに接続されています

NIBファイル

MainUIViewControllerのアウトレットをNIBのDirectoryArrayControllerに接続します。各Directoryのクラスと、DirectoryArrayController(NSObject)のクラスがあります。NSPopupButtonを次のように表示します。

DirectoryArrayControllerバインディング

そして、私はDirectoryArrayControllerをDirectoryPopupArrayControllerにバインドしています。

Directory PopupArrayControllerバインディング

これは、Directory PopupArrayControllerに接続されている.hファイルです。

@interface DirectoryPopupArrayController : NSObject
   @property (weak) IBOutlet NSPopUpButton *directoryPopupButton;
   @property (nonatomic) IBOutlet NSMutableArray *allDirectoryHistory;
   @property (nonatomic) eachDirectory *currentlySelectedDirectory;
@end

対応する.mファイルに次のコードを使用してサンプルディレクトリ情報を入力します

- (void)awakeFromNib {
    [super awakeFromNib];
    //testing sample directories
    self.allDirectoryHistory = [[NSMutableArray alloc] initWithCapacity:10];
    NSString *name;
    eachDirectory *newDirectoryName;
    for (int i = 0; i < 5; i++) {
        name = [NSString stringWithFormat:@"directory %d", i];
        newDirectoryName = [[eachDirectory alloc] initWithDirectoryName:name];

        [self.allDirectoryHistory addObject:newDirectoryName];
    }
}

これがeachDirectory.hのコードです

@interface eachDirectory : NSObject
  @property (nonatomic) NSString *directoryPath;
  @property (nonatomic) NSString *directoryVisibleName;

  -(id) initWithDirectoryName:(NSString *)newName;
@end

配列を作成するためのコードを配置し、配列コントローラーをUIViewController.mファイルに直接バインドすると、コードに移動すると、問題なく動作するように見えます。私がやりたいのは、すべての配列を別のクラスファイルで処理し、最終的なディレクトリの選択のみをメインコントローラに戻すことです。上記のようにNSArrayControllerをNIBのオブジェクトコントローラーにバインドすると、ポップアップに何も表示されず、理由がわかりません。

どんな助けでも大歓迎です、長い間投稿して申し訳ありません-ただ自分自身を明確にしたかっただけです。

4

0 に答える 0