我今天必须坚持使用stoopid,因为我花了一个多小时试图了解如何在我正在研究的这个iPhone项目中使变量args工作。有人可以帮助我在下面的单元测试中获得绿色条形图吗?我哪里错了?
#import <SenTestingKit/SenTestingKit.h>
@interface VAArgsTest : SenTestCase
{
}
@end
NSString* vaArgsAppend(NSString *first, ...)
{
NSMutableString *list = [[NSMutableString alloc] initWithString:first];
id eachArg;
va_list argumentList;
va_start(argumentList, first);
while(eachArg = va_arg(argumentList, id)) {
if(eachArg)[list appendString:(NSString*)eachArg];
}
va_end(argumentList);
return [list autorelease];
}
@implementation VAArgsTest
-(void) testCallVaArgsAppend
{
NSString *result = vaArgsAppend(@"one ", "two ", @"three");
STAssertEqualObjects(result, @"one two three", @"Expected appended string.");
}
@end
答案 0 :(得分:6)
改变这个:
NSString *result = vaArgsAppend(@"one ", "two ", @"three");
到此:
NSString *result = vaArgsAppend(@"one ", @"two ", @"three", nil);
编写可变方法时,必须有一种方法来确定要读取的参数数量。最常见的方法是在传入的列表中查找终止值。您没有达到终端条件。
答案 1 :(得分:3)
另外,“two”是一个const char *,而不是id。各种有趣的后果可能会因为像id一样对待它。替换为@“two”。
另外,如果(eachArg)是无关的。