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 に答える