2015-06-08 42 views
1

我有兩個UI組件,它們的值通過用戶默認值進行同步。第一個實質上是一個輸入字段,另一個是菜單項。當輸入字段的值發生變化,菜單項的等效鍵通過Cocoa綁定變化:可可綁定不讀取用戶默認值的零值

Input Field -> NSUserDefaultsController -> User Defaults 
User Defaults -> NSUserDefaultsController -> Menu Item 

這完全適用於一切,但一個nil值。出於某種原因,我無法將實際的nil值存儲在用戶默認值中,而是使用空字典。另一方面,讀取值我有一個變壓器「膨脹」空字典到nil值。

現在,當我在輸入字段中輸入一個非零值時,它會通過用戶默認值並一直傳播到菜單項。當我輸入一個「空」值時,空字典被正確存儲在用戶默認值中,但菜單項的綁定值不會改變。

我在做什麼錯?

回答

0

我做錯了什麼是在菜單項上實現綁定作爲黑客。我通過類別推出了keyCombo屬性:

@interface NSMenuItem (Combo) 
@property(assign, nonatomic) MASShortcut *keyCombo; 
@end 

這是被綁定到用戶默認的屬性。然後,因爲我是不會輕易添加某一類別中的實例變量,我只是在getter返回nil

@implementation NSMenuItem (Combo) 

- (MASShortcut*) keyCombo 
{ 
    return nil; 
} 

/* setter omitted */ 

@end 

這個工作很好,直到我想通過綁定的屬性設置爲nil。由於獲取者總是返回nil,可可綁定機制認爲沒有必要更新屬性值,因爲它似乎已經是nil