[Bindings] Comment ajouter au Modèle une clé non gérée par la couche View ?
Eddy58
Membre
De ce que j'ai appris jusqu'à maintenant des bindings, les réglages s'effectuent dans les Views sous IB, pour lesquelles on défini le NSController pour lesquelles elles sont bindées, le "Model Key Path" qui renseigne la View sur l'accesseur qu'elle doit utiliser, et d'autres choses que je passerais. Tout ça est trés bien.
Je me demande maintenant comment rajouter au modèle une clé qui n'a pas à être prise en compte par la couche View, genre par exemple un identifiant unique servant à une comparaison des instances, ces instances étant dans deux arrays différents.
Dans un code "traditionnel", on aurait quelque chose ressemblant à ceci :
[tt]
ClasseModele *objetDeClasseModele1;
ClasseModele *objetDeClasseModele2;
if(objetDeClasseModele1 uniqueID] isEqualToString:[objetDeClasseModele2 uniqueID)
{
...
}
[/tt]
Comment mettre en oeuvre un tel système avec les bindings ? C'est à dire dans un premier temps, intégrer l'accessorisation "uniqueID", puis ensuite faire en sorte qu'elle soit gérée par le NSArrayController ? ???
[EDIT] Je me suis planté de rubrique, ce topic doit être dans "Gestion des données". Merci à monsieur le modo de le déplacer.
Je me demande maintenant comment rajouter au modèle une clé qui n'a pas à être prise en compte par la couche View, genre par exemple un identifiant unique servant à une comparaison des instances, ces instances étant dans deux arrays différents.
Dans un code "traditionnel", on aurait quelque chose ressemblant à ceci :
[tt]
ClasseModele *objetDeClasseModele1;
ClasseModele *objetDeClasseModele2;
if(objetDeClasseModele1 uniqueID] isEqualToString:[objetDeClasseModele2 uniqueID)
{
...
}
[/tt]
Comment mettre en oeuvre un tel système avec les bindings ? C'est à dire dans un premier temps, intégrer l'accessorisation "uniqueID", puis ensuite faire en sorte qu'elle soit gérée par le NSArrayController ? ???
[EDIT] Je me suis planté de rubrique, ce topic doit être dans "Gestion des données". Merci à monsieur le modo de le déplacer.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Par contre pour la deuxième partie, je ne vois pas ce que tu veux dire par "faire en sorte qu'elle soit gérée par le NSArrayController".
De rien
J'ai pas le temps de tester dans l'immédiat, mais le code suivant rajoutera donc à chaque nouveau dictionary la clé "uniqueID" ?
[tt]
-(id)newObject
{
  newObject=[super newObject];
  [newObject setValue:@0A1B2C forKey:@uniqueID];
  return newObject;
}
[/tt]
Sinon, par "faire en sorte qu'elle soit gérée par le NSArrayController", j'entendais par là que la clé ajoutée par programmation soit gérée comme les clés définies dans IB, sans rajout de programmation pour le tri ou autres opérations. Mais apparemment pas besoin, et si j'ai bien compris, avec la méthode newObject, la clé va tout simplement se greffer au nouveau dictionary ?
J'ai vu que j'ai zappé l'aspect comparaison entre deux instances. Ce n'est a priori pas possible de faire ça directement, vu qu'un arraycontroller ne sait jamais gérer qu'un tableau. Par contre si tu dis ce à quoi tu veux arriver, il y a peut être quelque chose de mieux.
Par exemple, dans mon dernier projet, à chaque nouvelle instance de ma classe modèle j'associe un identifiant unique, qui sert à comparer les instances de même classe modèle. Car dans ce projet, il y a un array normal qui est composé de toutes les instances, et un array filtré en fonction des critères de recherches. La visualisation des instances des deux arrays se fait dans la même tableview, par permutation. Seulement, quand une instance est modifiée ou effacée dans un array, il faut la retrouver dans l'autre array via son identifiant et effectuer l'opération de modification ou d'effacement.
Tu va me dire, l'utilisation de NSMutableSet aurait peut-être simplifié la chose, mais je ne m'y suis pas attardé car j'étais bien parti avec NSMutableArray.
Là , avec NSArrayController, je pense qu'on peut arriver à ça avec les méthodes "arrangeObjects" pour la recherche par critères,"removeObject" pour l'effacement et les méthodes KVC pour la modification, mais je n'ai pas creusé plus de ce côté là . Mais tout les conseils sont les bienvenus.