我有一個NSTableView綁定到NSDictionaryController。我已經通過界面構建器設置了該內容字典。我的問題是,如何將對象添加到字典中,控制器將自動將其顯示在表中並將其顯示在字典中。添加對象到NSDictionaryController
我在關於NSArrayController的例子中看到,通過控制器而不是實際的數組添加新的對象,所以控制器看到了這個改變。然而,我沒有看到用字典控制器做這件事的類似方式...
感謝您的幫助。
我有一個NSTableView綁定到NSDictionaryController。我已經通過界面構建器設置了該內容字典。我的問題是,如何將對象添加到字典中,控制器將自動將其顯示在表中並將其顯示在字典中。添加對象到NSDictionaryController
我在關於NSArrayController的例子中看到,通過控制器而不是實際的數組添加新的對象,所以控制器看到了這個改變。然而,我沒有看到用字典控制器做這件事的類似方式...
感謝您的幫助。
那麼我最終搞清楚了這一點。由於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協議中實現的方法。
我希望這可以幫助其他人使用這些控制器!
jasons答案沒有爲我工作,因爲在我的實現中,它遇到了一行錯誤[newObject setValue:@「value」],說多個方法被發現與不匹配的結果,我找不到任何其他方法將按照預期添加新條目。
經過大量的搜索和嘗試的,我想出了這個解決方案: 剛剛續簽結合每次的dictController需要更新,像這樣:
[dictController bind:NSContentDictionaryBinding toObject:self withKeyPath:@"nameOfMyDictionary" options:nil];
所以在我的代碼,我將項目添加到我的字典,並在顯示我的字典的內容表之前,我重置綁定。這可能是一個骯髒的解決方案,但它爲我工作。
據我瞭解這個問題的問題是,NSMutableDictionary不會發布自己的鍵值觀察通知。它會愉快地說出關鍵的「不管」是否發生了變化,但它並沒有說嘿「我已經改變了」。這意味着綁定對象無法自行更新,因爲它沒有收到字典任何突變的通知。所以,當你每次更新內容時都要分配內容。您也可以在編輯內容字典之前和之後調用willChangeValueForKey:didChangeValueForKey。 – 2013-10-24 05:59:42
非常好!修改Swift3:
// Use NSDictionaryControllerKeyValuePair Protocol setKey
let temp = myDictionaryController.newObject()
temp.setValue(name, forKey: "key")
temp.setValue(list, forKey: "value")
myDictionaryController.addObject(temp)
這爲我工作,但後來我發現這個問題,這似乎更與我想做的事http://stackoverflow.com/questions/1596229/nsdictionarycontroller-doesnt-seem-to對齊-observe-changes-to-content-dictionary – TodK 2010-07-14 17:26:27