2009-10-20 67 views
1

我必须缺少一些简单的东西,但我在将一个tableView绑定到NSDictionaryController时遇到了一些麻烦。这是我目前的方案模型:NSDictionaryController似乎没有观察到对内容字典的更改

TableViewColumn --bindsTo - > DictionaryController.arrangedObjects。(值或键) --bindsTo - > someClass.someClassMember.aDictionary。

我已经测试了tableView,通过在init中添加一个条目到aDictionary,它显示正确。但是当另一个方法产生一个对象然后被添加到Dictionary中时,TableView似乎不会更新,甚至不知道aDictionary现在有两个条目。我试过了我能想到的一切。我试图(在someClassMember)[self aDictionary setValue:forKey:]和[self setValue:forKeyPath:@“aDictionary”]和类似的变化。关键是一个字符串,所以它应该是KVC/KVO兼容的,并且我在一些类成员中'@综合'了一个词典。

我错过了什么?为什么字典中的新条目不会显示在tableView中?

在此先感谢

+0

我希望有人回答到在第一个答案 – 2013-04-03 12:31:11

回答

1

添加新的项目之前尝试[self willChangeValueForKey:@"aDictionary"];,并且[self didChangeValueForKey:@"aDictionary"];后来在someClass

+1

这帮助的意见提出的问题,因为它揭示了一个字典中的一个对象没有正确实现'copyWithZone'的问题。但即使纠正后,我仍然需要[self will/didChangeValueForKey]。我想我不太了解KVC。我的设计怎么样保持dictionaryController或tableView观察字典的内容以编程方式改变?我应该遵守KVC,为什么我需要手动通知? – 2009-10-21 16:31:16

+0

有人可以回答上述问题吗? – 2013-04-03 12:30:42

+0

据我了解,你正在观察可变字典对象。由于它目前正在实施,因此它在发生突变时不会发布关键值观察通知。你没有做错什么,它只是没有发布通知。因此,如果您希望每个人都知道字典发生变异的时间,您必须自己发布通知。如果您不认为这是正确的行为,请向Apple提交错误报告。 – 2013-10-24 05:53:03