2

我在Objective-c中有一个方法,它接受NSDictionary并以空格分隔的形式返回值NSString。这个应用程序是跨平台的,因此我不能使用快速枚举。这是我到目前为止所拥有的,然后是输出(这表明从未创建过字符串):

-(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

4

3 回答 3

5

如果我正确阅读了这个问题,那么您只需要

[[dict allValues] componentsJoinedByString:@" "]
于 2012-11-07T18:45:48.233 回答
2

你需要一个可变字符串。改变这个:

NSString *params = [NSString string];

对此:

NSMutableString *params = [NSMutableString string];

然后改变这些:

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

对这些:

[params appendString:[values objectAtIndex:i]];
[params appendString:@" "];
于 2012-11-07T18:44:15.477 回答
0

stringByAppendingString:返回一个新字符串。所以你必须做这样的事情:

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

但缺点是,每次创建新字符串时都会浪费内存,您应该适当地使用 NSMutableString 代替。然后你可以打电话

[params appendString:[values objectAtIndex:i]];
于 2012-11-07T18:46:09.347 回答