2012-04-20 71 views
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並試圖在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]]; 

任何人都可以建議我 - 爲什麼它不工作,當我試圖直接通過callin更改值在myModel上的g setter方法?

+0

您是如何設置模型控制器的內容的? – 2012-04-20 13:27:18

+0

通過使用綁定的XIB ...內容對象:App委託,ModelKeyPath:myModel – Devarshi 2012-04-22 13:27:12

+0

嘗試記錄'self.myModel'和'[self.myModelController內容]'的值。顯然他們是不同的。你在哪裏設置/更改'myModel'屬性?你能否以非KVO兼容的方式做到這一點?從你的問題來看似乎不太可能,但是你能不小心擁有兩個'MyAppDelegate'實例,一個在NIB中實例化,另一個在代碼中實例化? – 2012-04-22 13:35:30

回答

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對象。