2009-10-20 5 views
1

Je dois manquer quelque chose de simple, mais j'ai du mal à lier un tableView à un NSDictionaryController. Voici un modèle de mon régime actuel.NSDictionaryController ne semble pas observer les modifications apportées au dictionnaire de contenu

TableViewColumn --bindsTo -> DictionaryController.arrangedObjects (valeur ou clé) --bindsTo -> someClass.someClassMember.aDictionary.

J'ai testé la tableView en ajoutant une entrée à un dictionnaire sur init, qui s'affiche correctement. Mais quand une autre méthode produit un objet qui est ensuite ajouté à un dictionnaire, le TableView ne semble pas mettre à jour ou même savoir que aDictionary a maintenant deux entrées. J'ai essayé tout ce que je pouvais penser. Je suis pas accédant directement à un dictionnaire .... J'ai essayé (dans someClassMember) [self aDictionary setValue: forKey:], et [self setValue: forKeyPath: @ "aDictionary"] et des variations similaires. La clé est une chaîne, elle devrait donc être conforme à KVC/KVO, et j'ai un @Dictionnaire dans @ClassMember.

Qu'est-ce qui me manque? Pourquoi les nouvelles entrées du dictionnaire n'apparaîtront-elles pas dans la tableView?

Merci à l'avance

+0

Je souhaite que quelqu'un a répondu à la question posée dans les commentaires pour la première réponse –

Répondre

1

Essayez [self willChangeValueForKey:@"aDictionary"]; avant d'ajouter le nouvel élément, et [self didChangeValueForKey:@"aDictionary"]; ensuite dans someClass

+1

Cela a permis, en ce sens qu'elle a révélé un problème que l'un des objets dans un dictionnaire n'a pas implémenté correctement 'copyWithZone'. Mais même après avoir corrigé cela, j'ai toujours besoin de [self will/didChangeValueForKey]. Je suppose que je ne comprends pas assez KVC. Qu'en est-il de ma conception qui empêche dictionnaireController ou tableView d'observer un dictionnaire dont le contenu est modifié par programmation? Je devrais être conforme à la norme KVC, pourquoi dois-je le signaler manuellement? –

+0

Quelqu'un peut-il répondre à la question ci-dessus? –

+0

Si je comprends bien, vous observez l'objet du dictionnaire mutable. Comme il est actuellement implémenté, il ne publie pas de notifications d'observation de valeur clé lorsqu'il est muté. Vous ne faites rien de mal, c'est juste ne pas poster des notifications. Donc, si vous voulez que tout le monde sache quand le dictionnaire est muté, vous devrez poster les notifications vous-même. Si vous ne pensez pas que c'est le comportement correct, envoyez un rapport de bug avec Apple. –

Questions connexes