0

サンプルアプリケーションで次のことを行っています。

モデル クラスを作成し、その中で配列をプロパティとして宣言しました。

@interface MyModel : NSObject

@property (strong, readwrite) NSArray *charactersToDisplay;

@end

私のアプリ デリゲート クラスでは、MyModel をプロパティとして宣言しました。

@interface MyAppDelegate : NSObject <NSApplicationDelegate>

@property (strong, readwrite) MyModel *myModel;
@property (weak) IBOutlet NSObjectController *myModelController;

- (IBAction)test:(id)sender;

@end

MainMenu.xib では、オブジェクト コントローラー オブジェクトをドラッグ アンド ドロップし、MyAppDelegate の myModel へのバインディングを実行しました。

私は次のことを達成しようとしています:

MyAppDelegateChange でボタンにバインドされるアクション test: を定義し、charactersToDisplay の値を変更しようとしています。

問題は次のとおりです。

このコードを使用している場合、機能しません:

[self.myModel setCharactersToDisplay:[[NSArray alloc] initWithObjects:@"1",@"2", @"3", "@4", @"5", nil]];

しかし、以下のコードを使用してオブジェクトコントローラーを介してその値を変更しようとしている場合、それは機能しています:

[[self.myModelController content] setCharactersToDisplay:[[NSArray alloc] initWithObjects:@"1",@"2", @"3", "@4", @"5", nil]];

誰でも私に提案できますか? myModel でセッターメソッドを呼び出して値を直接変更しようとすると、なぜ機能しないのですか?

4

1 に答える 1

0

これは、appDelegate から myModel にアクセスする場合は、IBOutlet を持たせる必要があり、インターフェイス ビルダーでそのアウトレットを接続する必要があるためです。以下のように IBOutlet を myModel に追加します。

@interface MyAppDelegate : NSObject <NSApplicationDelegate>

@property (strong, readwrite) IBOutlet MyModel *myModel;
@property (weak) IBOutlet NSObjectController *myModelController;

- (IBAction)test:(id)sender;

@end

次に、そのアウトレットをインターフェイス ビルダー内の MyModel オブジェクトに接続します。

于 2012-04-20T11:21:48.553 に答える