Nesnelerin bir koleksiyonunu içeren bir sınıfa sahibim. Sağlanan bir yüklemeyle eşleşen koleksiyonun ilk üyesini döndürecek bir yöntem oluşturmaya çalışıyorum.Tanınmayan seçici henüz hata ayıklama görebilir
...
//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;
}
Ben bu yöntemi test eden bir test sınıfı oluşturduk: Burada
toplama yöntemidir.- (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;
}
Ne bulma yaşıyorum "if (leaf.value == 1)" satırı üzerinde ben bir "tanınmayan seçici sınıfına gönderilen" alıyorum olmasıdır: İşte test yöntemi artı önermedir. Anlamsız olan şey, hata ayıklayıcının değer özelliğini ve değerini görebilmesidir, böylece nesne açıkça bu seçime sahiptir. Herhangi bir fikrin var mı?
btw Yaprak işlev tanımında notasyonu protokolünü
İyi argüman
Teşekkür olması gerekirdi. – danielpunkass
aslında bu kodun yığın akışına aktarılmasında neden olan bir yazım hatasıydı. Orijinal isimler değiller. Gönderiyi düzeltirim – Ian1971