2010-05-12 58 views
2

我有一個NSTableView綁定到NSDictionaryController。我已經通過界面構建​​器設置了該內容字典。我的問題是,如何將對象添加到字典中,控制器將自動將其顯示在表中並將其顯示在字典中。添加對象到NSDictionaryController

我在關於NSArrayController的例子中看到,通過控制器而不是實際的數組添加新的對象,所以控制器看到了這個改變。然而,我沒有看到用字典控制器做這件事的類似方式...

感謝您的幫助。

回答

4

那麼我最終搞清楚了這一點。由於arraycontroller鏡像使用數組,字典控制器會做同樣的事情,但是事實並非如此。這個過程是一個有點不同......

所以,如果你有,你想添加值,因此可以進行任何更新綁定到它,你使用下面的過程dictionarycontroller:

//Creates and returns a new key-value pair to represent an entry in the 
//content dictionary. 
id newObject = [dictController newObject]; 
//Use NSDictionaryControllerKeyValuePair Protocol setKey 
[newObject setKey:@"Key"]; 
//Use NSDictionaryControllerKeyValuePair Protocol setValue 
[newObject setValue:@"value"]; 
//Add the object to the controller 
[dictController addObject:newObject]; 

這實際上,將更新兩個字典控制器並將該值添加到內容字典中。在這種情況下,您不能使用setValue:ForKey,因爲這不是在NSDictionaryControllerKeyValuePair協議中實現的方法。

我希望這可以幫助其他人使用這些控制器!

+0

這爲我工作,但後來我發現這個問題,這似乎更與我想做的事http://stackoverflow.com/questions/1596229/nsdictionarycontroller-doesnt-seem-to對齊-observe-changes-to-content-dictionary – TodK 2010-07-14 17:26:27

0

jasons答案沒有爲我工作,因爲在我的實現中,它遇到了一行錯誤[newObject setValue:@「value」],說多個方法被發現與不匹配的結果,我找不到任何其他方法將按照預期添加新條目。

經過大量的搜索和嘗試的,我想出了這個解決方案: 剛剛續簽結合每次的dictController需要更新,像這樣:

[dictController bind:NSContentDictionaryBinding toObject:self withKeyPath:@"nameOfMyDictionary" options:nil]; 

所以在我的代碼,我將項目添加到我的字典,並在顯示我的字典的內容表之前,我重置綁定。這可能是一個骯髒的解決方案,但它爲我工作。

+0

據我瞭解這個問題的問題是,NSMutableDictionary不會發布自己的鍵值觀察通知。它會愉快地說出關鍵的「不管」是否發生了變化,但它並沒有說嘿「我已經改變了」。這意味着綁定對象無法自行更新,因爲它沒有收到字典任何突變的通知。所以,當你每次更新內容時都要分配內容。您也可以在編輯內容字典之前和之後調用willChangeValueForKey:didChangeValueForKey。 – 2013-10-24 05:59:42

0

非常好!修改Swift3:

// Use NSDictionaryControllerKeyValuePair Protocol setKey 
    let temp = myDictionaryController.newObject() 
    temp.setValue(name, forKey: "key") 
    temp.setValue(list, forKey: "value") 
    myDictionaryController.addObject(temp)