Core data numbre de relation B contenu dans l'entité A

syncsync Membre
20:53 modifié dans API AppKit #1
Bonjour,

J'ai une entité core data qui contient 2 entitées, l'entité A a une relation to-many avec une autre entité B j'utilise un nsarraycontroller pour l'entité A et un autre pour l'entité B et j'aimerai faire apparaà®te pour chaque ligne de mon talbeau controlé par le nsarraycotroller A un nombre dans une colonne représentant le nombre de relations A.B mais si je mets relationPourB.@count dans le model key path dans les bindings d'Interface Builder ça marche après un moment mais j'obtiens ce vilain message d'erreur:

2007-05-22 22:12:16.254 SMSGateway[7738] [<_NSFaultingMutableSet 0x168a800> addObserver:forKeyPath:options:context:] is not supported. Key path: @count

Ah et le contentSet de l'entité B est le suivant:

nsarraycontroller A selection relationToB

Il y aurait apparement une solution à  cette réponse ici: http://www.cocoabuilder.com/archive/message/cocoa/2006/2/7/156264 dans la seconde réponse qui est :

You have to bind to a value that's read/write.  @count is read only. 
If you need to bind to it, make a managed object key like arrayCount 
that returns the count in the getter method, and does nothing in the 
setter method.

J'ai fait l'object en question rien dans le setter mais je n'arrive pas à  trouver le bon keypath pour la methode getter qui retourne le bon @count pour chaque ligne de mon tableau.

Je sais il faut être caustaud pour comprendre cette explication extraordinaire mais ça fait une moment que je me creuse la tête donc si vous avez une solution elle serait vraiment la bienvenue.

Anthony

Réponses

  • syncsync Membre
    20:53 modifié #2
    Le but étant de créer un étiquette à  la mail avec le nombre d'élément contenu dans la messageBox
  • syncsync Membre
    mai 2007 modifié #3
    Donc j'ai trouvé une solution, mais je pense qu'elle est bien trop compliqué mais elle fonctionne.

    Donc 2 méthodes
    - (NSString *)arrayCount<br />{<br /> return [self setValue:[[[[messagesBoxController arrangedObjects]objectAtIndex:rowIndex]valueForKeyPath:@&quot;relMessage.@count&quot;]stringValue]<br />}<br />- (void) setArrayCount:(NSString *)anArrayCount<br />{<br />//lui ne fait rien<br />}
    


    L'entier rowIndex est récupéré depuis cette méthode de tableau déléguée:
    - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
    


    Et finalement je bind arrayCount depuis mon applicationDelegate pour la colonne de mon tableau. Cette colone a une nscell personnalisée qui récupère le [self stringValue] commun à  toute les nscell et dessine l'étiquette dans la cellule personalisée.

    Tout ceci posait un dernier problème, lorsque je cliquais sur ma colonne personnalisée l'étiquette prenait des valeurs innatendues. Donc tableau personnalisé récupérer l'event du mouseDown ne pas faire de [super mouseDown] lorsque l'on clique sur la cellule perso mais récupérer la position du click pour la ligne et sélectionner la ligne sur laquelle on a cliqué à  travers le code.

    Voilà  mais je reste persuadé qu'il y a une solution de loin plus simple elle finira peut être bien par arrivé.

    Anthony




Connectez-vous ou Inscrivez-vous pour répondre.