2012-11-25 93 views
0

我創建一個bool類型的財產在我的應用程序委託中性質的變化:GUI元素沒有反應

在AppDelegate.h

@property(assign) BOOL myProp; 
在AppDelegate.m

@synthesize myProp; 

然後在XIB文件中,我打開了按鈕的Enabled-property的綁定編輯器。 我已啓用綁定並將其設置爲「應用程序委託」。對於我選擇了模型的關鍵路徑:

self.myProp

當我運行應用程序和切換的我的財產沒有任何反應值。該按鈕不會更改其啓用狀態。爲什麼?

回答

2

當你分配給財產,你通過self.myProp = foomyProp = foo做到了嗎?後者使用直接ivar訪問,繞過KVO(鍵值觀察,綁定的基礎組件)。您可以manually trigger KVO notifications,但更好的選擇幾乎總是隻通過setter方法分配(如self),並隱式獲取automatic change notification

請注意,爲了讓它產生一個setter,你需要私有地重新聲明你的屬性爲readwrite,你可以使用class extension來做到這一點。

+0

'readwrite'是setter的默認設置(所以你不需要明確地寫它) –

1

首先應該聲明爲BOOL,第二你已經爲只讀宣佈它(如果你想改變的價值,你必須只讀刪除)

要設置BOOL您使用self.myProp = YES/NO;

+0

謝謝,但是這並沒有解決問題:-( – Boris

+0

然後,你需要提供更多關於你的問題的信息,什麼是預期的輸出和實際發生的事情。日誌和代碼... –

+0

沒有更多的相關我只需要調用「myProp =!myProp」來切換它的值,這個屬性的按鈕不會改變狀態... – Boris

1

enter image description here我試圖以這種方式

解決這個在AppDelegate.h

@property (assign)BOOL myProp; 
- (IBAction)onOff:(id)sender; //to switch the value of myProp 

在AppDelegate.m

@synthesize myProp; 

- (id)init{ 
    self = [super init]; 
    if (self) { 
     myProp=NO; 
    } 
    return self; 
} 

- (IBAction)onOff:(id)sender { 
    NSLog(@"before myProp=%d",myProp); 
    self.myProp=!myProp; 
    NSLog(@"after myProp=%d",myProp); 

} 

目標按鈕的Enabled設置爲應用代表。

模型關鍵路徑設置爲self.myProp

它的完成!