Je n'arrive pas à trouver la bonne façon de lier un NSArrayController (lié à son tour par une vue de table) à une propriété NSArray d'une instance de NSDocument via un contrôleur de vue.Comment lier un contrôleur RAID à une propriété de tableau NSDocument?
Ma sous-classe NSDocument a la propriété NSArray * pages
. J'ai d'abord reflété la propriété pages
dans le contrôleur de vue, mais cela signifie que la vue de table ne se met pas à jour lorsque NSDocument ajoute des éléments à son tableau pages
. Les seules façons de forcer une mise à jour dans ce cas sont will..
/didChangeValueForKey:@"pages"
dans le contrôleur de vue, mais ce n'est pas pratique lorsque la modification n'est pas déclenchée à partir du contrôleur de vue. L'appel au will/didChangeValueForKey
dans NSDocument n'entraîne pas directement la mise à jour du contrôleur RAID.
J'ai essayé de me lier directement au document.pages
du ViewController, mais cela ne semble pas fonctionner, ou du moins n'affiche aucune mise à jour.
Quelle serait la bonne technique à utiliser ici?
Avez-vous vérifié si la propriété 'pages' suit les règles de [Conformité KVO] (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOCompliance.html#//apple_ref/doc/uid/20002178-BAJEAIEE)? – Willeke
Étant donné que NSDocument hérite de NSObject, je suppose qu'il est compatible avec KVO. La propriété pages est définie comme '@property (nonatomic, strong) NSMutableArray * pages;' - d'après ce que je comprends, cela devrait être tout ce qui est nécessaire, non? – fbitterlich
Si vous faites 'self.pages = someArray' oui, si vous faites' [self.pages addObject: someObject] 'non. Vous devez utiliser 'mutableArrayValueForKey:' ou 'willChange: valuesAtIndexes: forKey:'/'didChange: valuesAtIndexes: forKey:'. – Willeke