2013-11-21 30 views
0

我在我的類中的兩個方法叫TestClient字符串格式化,可變參數和EXEC_BAD_ACCESS

-(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]; 
} 

我單位在與EXEC_BAD_ACCESS NSString的formattedString線測試崩潰。我在做字符串格式或可變參數錯誤嗎?是因爲我試圖用int來做一個格式嗎?

回答

2

%I(或%d) - 如果你想打印整數

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

%@ - 將調用[說明]在要打印類。對於像float,int這樣的內置變量類型,你不能使用它,因爲它們不是對象。

+1

Derp derp。我覺得這是這樣的。我發誓我試過%i,但它仍然墜毀。這看起來像是在工作。只要StackOverflow允許,我會立即接受。 – danieljimenez