我有我的共享用戶默認的plist看起來像:NSValueTransformer不會被調用
menuItems (Array)
Item 0 (Dictionary)
name (String) "Menu Item 0"
show (Boolean) NO
Item 1 (Dictionary)
name (String) "Menu Item 1"
show (Boolean) YES
等。
我有一個NSArrayController,其內容數組綁定到共享用戶默認值控制器與控制器鍵=「值」和模型關鍵路徑=「menuItems」。我有「處理內容作爲複合值」啓用。它的對象控制器模式是「類」,它控制的類名是NSMutableDictionary。
期望的結果是將NSMenuItems「hidden」屬性綁定到plist中的「show」條目。你會注意到,雖然,「隱藏」和「秀」是對立的,所以我創建了一個NSValueTransformer簡單地做:
return [NSNumber numberWithBool:!value];
我設置了綁定,如下所示,其中,「項目」是一個NSMenuItem, 「valueTransformer」是一個alloc'ed和init'ed變壓器,如上所述,和paneNum是其中合適的字典可以爲相應的菜單項中找到的索引:
NSDictionary *bindingOptions = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSContinuouslyUpdatesValueBindingOption,
valueTransformer, NSValueTransformerBindingOption,
nil];
[item bind:@"hidden"
toObject:[[defaultsController arrangedObjects] objectAtIndex:paneNum]
withKeyPath:@"show"
options:bindingOptions];
的結合似乎是工作於一定程度上;菜單項最初顯示或隱藏,但valueTransformer從不使用,因此每個菜單項的「隱藏性」都是向後的。 (順便說一句,如果plist改變了,菜單項「hiddenness」也不會自動更新,就像我期望的綁定一樣)。
我錯過了什麼?
順便說一句,我意識到在plist中存儲「隱藏」而不是「顯示」會更容易,但是現在我想明白爲什麼這不起作用。
編輯:我的猜測是,它與我試圖綁定到NSMutableDictionary中的對象的事實有關。如果是這種情況,那麼做到這一點的正確方法是什麼?
你是如何創建'NSValueTransformer'的?你註冊了它的名字嗎? –
由於我創建和實例(只是分配/初始化)和使用NSValueTransformerBindingOption我不認爲我需要註冊其名稱。我認爲這隻有在使用NSValueTransformerNameBindingOption時才需要。我已經嘗試了兩種方式,並且我的名字註冊成功了,因爲我可以通過NSValueTransformer查看它,但它仍然無效。 – devguydavid