Question

Je viens de me rendre compte qu'il existe deux manières d'utiliser un NSArrayController.

Liez le contrôleur à un tableau et ajoutez des objets au tableau. Ou n'utilisez aucun tableau et ajoutez des objets directement au contrôleur.

[racesArray addObject: [[Race alloc] initWithName:@"Human"] ];

Ou

[myRacesController addObject: [[Race alloc] initWithName:@"Human"] ];

Puisque les deux versions fonctionnent bien pour mes besoins, je me demande quelle est la bonne façon de l’utiliser. J'imagine que l'utilisation d'un tableau pourrait être préférable, mais puisque NSArrayController est également capable de stocker des données, pourquoi ne devrais-je pas utiliser cette fonctionnalité?

Était-ce utile?

La solution

Ne parlez pas directement au tableau comme vous le faites dans votre premier exemple. Le contrôleur RAID ne détectera pas vos modifications, sauf si vous publiez explicitement des notifications KVO à leur sujet, ce qui est fastidieux et facile à oublier.

Je recommande de lier le contrôleur de tableau, puis d’implémenter Méthodes d'accès au tableau compatibles KVC pour votre propriété et utilisez-les partout dans votre application (sauf dans les méthodes init et dealloc de la classe).

De cette manière, votre objet peut muter son propre tableau sans avoir à publier explicitement des notifications KVO ni à connaître le contrôleur de tableau.

Autres conseils

Les deux manières vont bien. Si vous ne lui donnez pas de tableau, NSArrayController conserve le sien.

NSArrayController est compatible KVO pour la liaison avec des éléments d'interface utilisateur. Il contient également des métadonnées supplémentaires pour un tableau d'objets tels que selectedObject. Ces objets de commodité ne sont pas disponibles avec NSArray. NSArray est simplement un tableau avec les opérateurs de tableau réguliers et les méthodes définis. Utilisez-le si vous n'avez pas besoin de vous lier à des éléments de l'interface utilisateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top