字符串格式,varargs和EXC_BAD_ACCESS

时间:2013-11-21 15:44:18

标签: ios objective-c cocoa-touch

我的班级中有两个名为TestClient

的方法
-(void)log:(NSString *)logMessage, ... 
{
    va_list ap;
    va_start(ap, logMessage);
    [self log:logMessage withParameters:ap];
    va_end(ap);
}

-(void)log:(NSString *)logMessage withParameters:(va_list)valist 
{
    NSString *formattedString = [[NSString alloc] initWithFormat:logMessage arguments:valist]; //Crashes here
    [self callMethod:@"log" withParams:formattedString, nil]; //Calls my method.
}

这是我的单元测试:

-(void)testWtfCondition
{
    int test = 1;
    NSString *test2 = @"wtf";
    [proxy log:@"This is a test: %@ %@",test, test2];
}

我的单元测试在NSString formattedString行与EXEC_BAD_ACCESS崩溃。我在这里使用字符串格式化或varargs做错了吗?是因为我正在尝试使用int进行格式化吗?

2 个答案:

答案 0 :(得分:2)

%i(或%d) - 如果要打印整数

 [proxy log:@"This is a test: %i %@",test, test2];

%@ - 将在您要打印的课程上调用[description]。对于像float,int这样的内置变量类型,你需要不能使用它,因为它们不是对象。

答案 1 :(得分:0)

有关更多字符串格式,您可以查看String Programming Guide