2012-11-07 140 views
2

我在Objective-c中有一個方法,它接受NSDictionary並將值作爲空格分隔的NSString返回。這個應用程序是跨平臺的,因此我不能使用快速枚舉。這是我到目前爲止,其次是輸出(這表明,從未創建的字符串):如何將值轉換爲NSString的NSDictionary?

-(NSString *)stringValuesFromDict:(NSDictionary *map) 
{ 
    NSArray *values = [map allValues]; 
    NSString *params = [NSString string]; 
    NSLog(@"values length: %d", [values count]); 
    NSLog(@"values = %@", [values description]); 
    for (int i = 0; i < [values count]; i++) 
    { 
     [params stringByAppendingString:[values objectAtIndex:i]]; 
     [params stringByAppendingString:@" "]; 
    } 
    NSLog(@"params = %@", params); 
    return params; 
} 

NSDictionary

{"arg1"="monkey"} 

輸出:

values length: 1 
values = (
    monkey 
) 
params = 

我究竟做錯了什麼?我怎樣才能將params設置爲monkey

回答

2

您需要一個可變字符串。更改此:

NSString *params = [NSString string]; 

這樣:

NSMutableString *params = [NSMutableString string]; 

然後更改這些:

[params stringByAppendingString:[values objectAtIndex:i]]; 
[params stringByAppendingString:@" "]; 

這些:

[params appendString:[values objectAtIndex:i]]; 
[params appendString:@" "]; 
+0

完美!這從我給出的代碼起作用,並顯示我做錯了什麼以及如何解決它。 – Phil

5

如果我正確讀取的問題,你需要是

[[dict allValues] componentsJoinedByString:@" "] 
+0

好又簡單。 – rmaddy

0

stringByAppendingString:返回一個新的字符串。所以,你會做這樣的事情:

params = [params stringByAppendingString:[values objectAtIndex:i]]; 

但缺點是,每一次一個新的字符串被創建,這是浪費內存 你應該propably使用的NSMutableString代替。然後你可以撥打

[params appendString:[values objectAtIndex:i]];