2010-03-19 2 views
0

Dans une partie d'un programme sur lequel je travaille, je dois compter chaque fois que chaque personne a travaillé sur des projets avec l'autre personne. Disons que nous avons des entités «employés» et des entités «session». Dans chaque session, il y a quatre types de projets, "A", "B", "C", & "D", chacun une relation plusieurs-à-plusieurs aux employés.Récupération des relations à partir de deux tableaux de pointeurs

Je fais une boucle pour examiner systématiquement chaque personne avec laquelle une personne sélectionnée a travaillé. Tout d'abord, je mets tous leurs types de projets dans un seul tableau, donc c'est plus facile de faire une boucle, mais au moment où je demande le dernier projet imbriqué pour ses membres Employés, j'obtiens une erreur "sélecteur non reconnu".

IBOutlet NSArrayController * superList; 

EDIT: J'ai oublié de représenter ce tableau qui pointe vers les objetsObjects du contrôleur.

NSArray * list = [superList arrangedObjects]; 
int x; 
for(x = 0; x < [list count]; x++){ 
NSArray *A = [[list objectAtIndex:x] valueForKey:@"projectAs"]; 
NSArray *A = [[list objectAtIndex:x] valueForKey:@"projectBs"]; 
NSArray *A = [[list objectAtIndex:x] valueForKey:@"projectCs"]; 
NSArray *A = [[list objectAtIndex:x] valueForKey:@"projectDs"]; 

NSArray *masterList = [[NSArray alloc] initWithObjects: projectAs, projectBs, projectCs, projectDs, nil]; 

int y; 
for(y = 0; y < [masterList count]; y++){ 
int z; 
for(z = 0; z < [[masterlist objectAtIndex:y] count]; z++){ 
//And now to make an Array of this employee's partners on the selected object, to run comparisons on. 
//I also have an array of keys for each session's teams, so that's what I'm referencing here: 
NSArray * thisTeam = [list objectAtIndex:y] objectAtIndex:z] valueForKey:projectKey]; 

Ce déclenche une exception ... à savoir - [_ NSFaultingMutableSet objectAtIndex:]: sélecteur non reconnu envoyé à l'instance

Quel est le problème avec cette dernière création Array?

+0

Je ne vois pas pourquoi vous devriez utiliser 'objectAtIndex:' ici et pas l'énumération rapide: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocFastEnumeration. html # // apple_ref/doc/uid/TP30001163-CH18-SW1 Cela ne résoudra pas votre problème (et vous ne devriez faire la modification qu'après vous), mais cela rendra le code plus facile à lire. –

+0

C'est une fonctionnalité géniale dont je suis au courant en Python, mais que je n'avais pas lue dans le livre Obj-C de Kochan. Merci beaucoup pour le partage! – DanF

Répondre

1

Sur la base de votre ligne:

NSArray * A = [[liste objectAtIndex: x] valueForKey: @ "projectAs"];

L'appel:

[Liste objectAtIndex: y]

ne retourne pas un tableau - il renvoie un NSDictionary, ce qui signifie que vous ne pouvez pas appeler objectAtIndex: z sur le résultat.

Il semble que cela devrait être [liste de contrôle objectAtIndex: y]?

+0

Vous étiez mort, mais je viens de réaliser que j'ai mal présenté mon code. "liste" était supposé être un tableau pointant vers les ACO, non l'AC lui-même. Vous voyez un problème à gauche? – DanF

+0

Essayez ceci: id whatAmI = [list objectAtIndex: y]; NSLog (@ "% @", whatAmI »); NSArray * thisTeam = [[whatAmI objectAtIndex: z] valueForKey: projectKey]; À ce stade, nous avons besoin de savoir exactement ce que [liste objectAtIndex: y] – ericg

+0

Donc, je pense que le problème est, je ne suis pas sûr quel genre d'objet est récupéré lorsque je interroge un employé (ou "Player") ce que leur valueForKey: @ "redTeams" est.J'espère un tableau ou l'ensemble des instances to-many cela devrait rappeler, mais quand j'ai fait le test id-NSLog, il appelle le résultat de la clé: Objets relationnels pour {( (entité: Afficher; id: 0x100e75500 ; données: Ce qui semble être un objet unique, pas un ensemble ou un tableau. – DanF

Questions connexes