2011-05-26 30 views
2

我有一個包含我的數據的NSDictionary對象。我傳入一組鍵名和顯示格式來表示我的數據的字符串。構建可變數量的鍵和格式的字符串

[self displayMyDataWithTheseKeys:myKeyArray inThisFormat:myFormat]; 

,其中,例如,

myKeyArray = [NSArray arrayWithObjects: @"Key1", @"Key2", nil]; 

myFormat = [NSString stringWithString: @"%@ to the %@ degree"]; 

然而,myFormat可能改變,並且鍵的陣列中的數目也可以變化。

如果數組中元素的數量總是2,那麼這將是微不足道的。但是,如何處理可變數量的元素?

+0

你可以掃描%@的任何出現次數,% i,%d,...在myFormat字符串中,將其拆分爲只包含單個格式說明符的子字符串,然後對所有這些子字符串逐個執行格式替換,最後將所有內容放在一起形成單個字符串。我還沒有嘗試過。 – hennes 2011-05-26 21:07:30

回答

0

這裏沒有真正的內置方法,但它相對比較容易解析格式字符串與NSScanner。這裏有一個簡單的例子,它只能處理%@格式說明,但作爲一個NSArray所有元素都是對象,而不是原始類型,無論如何,這一問題並不應該:

NSArray *myKeyArray = [NSArray arrayWithObjects: @"Key1", @"Key2", nil]; 
NSString *myFormat = [NSString stringWithString: @"%@ to the %@ degree"]; 

NSMutableString *result = [NSMutableString string]; 
NSScanner *scanner = [NSScanner scannerWithString:myFormat]; 
[scanner setCharactersToBeSkipped:[NSCharacterSet illegalCharacterSet]]; 
int i = 0; 
while (![scanner isAtEnd]) { 
    BOOL scanned = [scanner scanString:@"%@" intoString:NULL]; 
    if (scanned) { 
     if (i < [myKeyArray count]) { 
      [result appendString:[myKeyArray objectAtIndex:i]]; 
      i++; 
     } else { 
      //Handle error: Number of format specifiers doesn't 
      //match number of keys in array... 
     } 
    } 
    NSString *chunk = nil; 
    [scanner scanUpToString:@"%@" intoString:&chunk]; 
    if (chunk) { 
     [result appendString:chunk]; 
    } 
} 
-1

用途:stringByAppendingString

下面是關於如何使用它的一個例子:

NSString *someString = @"String"; 

someString = [someString stringByAppendingString:[NSString stringWithFormat:@"%@",variable1]]; 
someString = [someString stringByAppendingString:[NSString stringWithFormat:@"%@",variable2]]; 
someString = [someString stringByAppendingString:[NSString stringWithFormat:@"%@",variable3]]; 

...等等

如果你有,你希望把鍵數組一個字符串:

NSString *string = @"And the keys are:\n"; 

    for(int i = 0; i < [array count]; i++) 
    { 
     NSString *thisKey = (NSString *)[array objectAtIndex:i]; 

     string = [string stringByAppendingString:[NSString stringWithFormat:@"Key number %d is %@",i,thisKey]]; 
    } 
+0

但是,這不會給我我想要的格式。 – John 2011-05-26 20:44:31

+0

請參閱我的編輯...使用stringWithFormat。 – Sid 2011-05-26 20:45:58

+0

感謝您提供幫助,但這仍然不會讓我得到我想要的格式...您的解決方案無視myFormat變量,該變量顯示包括所有變量的格式。 – John 2011-05-26 20:52:48

相關問題