通过app delegate类更改在模型类中声明为属性的实例变量的值

时间:2012-04-20 11:12:11

标签: objective-c cocoa nsobjectcontroller

我正在我的示例应用程序中执行以下操作:

我创建了一个模型类,并在其中声明了一个数组作为属性。

@interface MyModel : NSObject

@property (strong, readwrite) NSArray *charactersToDisplay;

@end

在我的app委托类中,我将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中定义了一个动作测试:,它绑定到一个按钮,并尝试更改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上的setter方法直接更改值时,为什么它不起作用?

1 个答案:

答案 0 :(得分: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对象。