J'ai une classe qui contient une collection d'objets. J'essaye de créer une méthode qui retournera le premier membre de la collection correspondant à un prédicat fourni.Sélecteur non reconnu mais débogage peut le voir
Voici la méthode de collecte:
...
//predicate is a boolean method that accepts an object as its single parameter
-(id<Notation>) getFirstChildMatching: (SEL) predicate declaredInInstance:(id) instance
{
NSMethodSignature *sig = [[instance class] instanceMethodSignatureForSelector:predicate];
NSInvocation *myInvocation = [NSInvocation invocationWithMethodSignature:sig];
[myInvocation setTarget:instance];
[myInvocation setSelector:predicate];
int numItems = childNotations.count;
for(int i=0;i< numItems;i++)
{
id<Notation> thisNotation = [childNotations objectAtIndex:i];
[myInvocation setArgument:thisNotation atIndex:2];
BOOL result =NO;
[myInvocation retainArguments];
[myInvocation invoke];
[myInvocation getReturnValue:&result];
if (result)
return thisNotation;
}
return nil;
}
J'ai créé une classe de test qui teste cette méthode. Voici la méthode d'essai plus le prédicat:
- (void) testGetFirstChildMatching
{
Leaf *line1 = [[Leaf alloc] initWithValue:1 step:Step_A andNumber:1];
Leaf *line2 = [[Leaf alloc] initWithValue:2 step:Step_B andNumber:2];
SEL mySelector = @selector(valueIs1:);
id<CompositeNotation> compositeNotation = [[CompositeNotation alloc] init];
[compositeNotation addNotation:line1];
[compositeNotation addNotation:line2];
id notation = [compositeNotation getFirstChildMatching: mySelector declaredInInstance:self];
STAssertEquals(YES, [notation isKindOfClass:[Leaf class]], @"Should be of type Leaf: %@", notation);
//Leaf *found = ((Leaf *)notation);
STAssertEquals([notation value], line1.value, @"Should have found line 1 with value 1: actual %i", [notation value]);
[line1 release];
[line2 release];
}
-(BOOL) valueIs1: (Leaf *) leaf
{
if (leaf.value == 1)
return YES;
return NO;
}
Ce que je trouve que le « if (leaf.value == 1) » ligne Je reçois un « sélecteur non reconnu envoyé à la classe ». Ce qui n'a pas de sens, c'est que le débogueur peut voir la propriété value et sa valeur donc l'objet a clairement ce select. Des idées?
BTW feuille implémente le protocole de notation
bon argument pour le choix d'une stratégie de nommage des variables moins confuse. – danielpunkass
en fait c'était juste une faute de frappe causée par la transposition du code à stackoverflow. Ils ne sont pas les noms d'origine. Je vais corriger le post – Ian1971