2011-09-12 31 views
0

我有一個NSMenuItem。我希望菜單項的state又名value又名checkmark匹配我在對象中使用的布爾值。在NSMenuItem中使用複選標記的正確方法

我目前正在使用「發送操作」 - >「選擇器」插座。拖動它到我的對象,並使用IBAction爲如下:

- (IBAction) setMyGlobalBoolean:(id)sender 
{ 
    if(globalBoolean) 
    { 
     globalBoolean = FALSE; 
     [sender setState: NSOffState]; 
    } 
    else if(!globalBoolean) 
    { 
     globalBoolean = TRUE; 
     [sender setState: NSOnState]; 
    } 
} 

但是,我有我應該使用的Bindings InspectorValue屬性爲布爾變量綁定的感覺。

問題是,當我嘗試這樣做時,我無法將我的布爾值鏈接到值。我可以將值連接到IB中的對象。但是「控制器密鑰」字段則爲空並且不可編輯。

我可以讓控制器鍵字段工作的唯一方法是如果我將值字段掛接到Shared User Defaults Controller ......我不知道那是什麼或爲什麼/如果我應該使用它。

回答

0

你已經提到你有一個全局布爾值(這表明它對你的應用程序是全局的),但是你也談論了試圖通過對象訪問布爾值。

如果你想存儲你的布爾值在NSUserDefaults那麼你應該使用Shared Used Defaults Controller。您可以訪問控制器密鑰,因爲它是一個控制器。

如果布爾值是您的對象的成員,那麼您應該創建訪問器,以便它可以用於鍵值編碼。

如果布爾值確實是一個全局的,那麼我不認爲你可以將一個值綁定到它。我建議你在App Delegate中創建你的「全局」布爾值,然後將你的NSMenuItem綁定到App Delegate。由於App Delegate不是控制器,您只需要使用globalBoolean作爲模型關鍵路徑。

+0

呃,是的,布爾值是我的對象的成員。對於術語混淆抱歉。 – cksubs

+0

你說過:「如果布爾值是你的對象的成員,那麼你應該創建訪問器,以便它可以用於鍵值編碼。」 - 這基本上是我在上面的代碼中完成的嗎? – cksubs

+0

訪問器可以使用'@ synthesize'或通過明確創建它們來創建,例如(void)setGlobalBoolean:(BOOL)和(BOOL)globalBoolean。我沒有看到你的問題中提到的那些。 –

相關問題