麻烦在for循环中追加字符串(NSString)

时间:2011-05-25 08:41:53

标签: iphone objective-c cocoa string nsstring

好的,所以我从在线数据源中提取给定邮政编码的地址列表。请求向我发送了一个数组数组的JSON,在数组的第一层内是字符串数组。

这些包含例如。

Addressline1, Addressline2, Town, Country, Postcode

我需要为每个地址添加所有这些字符串,这样我每个地址只有一个工作字符串。但是,有时阵列中有一个空白字段@""

这是我的for循环。

    id object;
    NSString *startString = [NSString stringWithString:@"testStart:"];

    for (object in arrayContainingAddress) {

        NSString *useableString = [NSString stringWithFormat:@"%@", object];

        if (![useableString isEqualToString:@""]) {
            NSLog(@"%@", useableString);
            [startString stringByAppendingString:useableString];
            NSLog(@"%@", startString);
        }   

    }

    NSLog(@"%@", startString);

问题是,startString总是以'testStart:'结尾注销,但是useableString记录包含正确的地址线,城镇等,for循环中的startString NSLog也只是注销为'testStart:'。

整个代码块都位于while循环中,为每个地址切换适当数组的'arrayContainingAddress'。

'id object'的原因是我的JSON转换有时会将值转换为NSNumbers(地址的第一行可能是门牌号码,例如123),所以我在这里防止崩溃。

TLDR:我的for循环中没有附加字符串'startString'。

2 个答案:

答案 0 :(得分:6)

stringByAppendingString对调用它的字符串没有任何作用。它返回一个新的自动释放字符串,它是两者的串联。

你想要做的是让你的startString成为一个可变的字符串:

NSMutableString *startString = [NSMutableString stringWithString:@"testStart:"];

然后使用appendString方法:

[startString appendString:useableString];

答案 1 :(得分:3)

您应该更改您的代码,如下所示:

    if (![useableString isEqualToString:@""]) {
        NSLog(@"%@", useableString);
        startString = [startString stringByAppendingString:useableString];
        NSLog(@"%@", startString);
    }

您没有更新循环中的startString