0

助けてください、これは私を怒らせています:(

私が書いているOSX Cocoaアプリの一部として、NSPopUpButtonを使用して作成/編集しているレコードのタイプを選択するフォームがあります。

バインドを使用してポップアップ ボタンを配列コントローラーにバインドしていますが、選択した値は NSString にバインドされています。

ポップアップにデータが入力され、アイテムを選択してレコードを保存できますが、うまくいかないことが 2 つあります。

1) 選択された値オブジェクトには、アイテムのキーではなくテキスト名が含まれています - コンテンツ オブジェクト バインディングを設定しました

2) フォームのリロード時にポップアップの選択項目を復元できません。

参考になるコード サンプルを次に示します。

@実装スニペット:

IBOutlet NSPopUpButton *popMediaType;
IBOutlet NSArrayController *acMediaTypes;

@property (nonatomic, copy) NSString *selMediaType;

@インターフェーススニペット:

- (void)setupForm {
    NSArray *types = [[NSArray alloc] initWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:@"Video", @"name", @"video", @"value", nil],
                                                       [NSDictionary dictionaryWithObjectsAndKeys:@"Advert", @"name", @"advert", @"value", nil],
                                                       [NSDictionary dictionaryWithObjectsAndKeys:@"Graphic", @"name", @"graphic", @"value", nil],
                                                       nil];

    [acMediaTypes setContent:types];
}

インターフェースビルダーで:

acMediaTypes は、mediaTypes という配列コントローラー オブジェクトの参照アウトレットです。 popMediaType は、フォーム上の NSPopUpButton の参照アウトレットです。

私の NSPopUpButton のバインディングは次のように構成されています。

Content (mediaTypes.arrangedObjects)
Bind to: mediaTypes
Controller Key: arrangedObjects
Model Key Path: <null>

Content Objects (mediaTypes.arrangedObjects)
Bind to: mediaTypes
Controller Key: arrangedObjects
Model Key Path: value

Content Values (mediaTypes.arrangedObjects)
Bind to: mediaTypes
Controller Key: arrangedObjects
Model Key Path: name

Selected Value (File's Owner.selMediaType)
Bind to: Files Owner
Controller key: <null>
Model Key Path: selMediaType

ポップアップが正しく表示され、配列の「名前」部分のテキストが正しく表示されます。

NSLog() のようなものを使用してコードを読み取るselMediaTypeと、たとえば、そのアイテムが選択されている場合は「ビデオ」が表示されます-「ビデオ」である必要があります (辞書の「値」部分の小文字)

問題なく値を sqlite データベースに保存し、ターミナルから sqlite3 を使用して値を検査すると、すべてが保存されます。

テーブルから値をロードすると、設定selMediatypeするだけで NSPopUpButton のアイテムの位置がリセットされると思っていましたが、そうではありません。

4

1 に答える 1