2011-05-25 154 views
1

好吧,所以我拉从一个在线数据源给定的邮政编码地址列表。请求向我发送一个数组数组的JSON,在数组的第一层中是字符串数组。麻烦appendStrings(NSString)for循环

这些包含例如。

Addressline1, Addressline2, Town, Country, Postcode 

我需要为每个地址添加所有这些字符串,以便每个地址只有1个工作字符串。但是,有时在数组内有一个空白字段@""

这是我的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日志包含正确的addressline,镇等,将startString的NSLog中的for循环也只是注销为“ testStart:”。

这整段代码都放在一个while循环中,它为每个地址的适当数组切换'arrayContainingAddress'。

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

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

回答

6

stringByAppendingString不会对被调用的字符串做任何事情。它会返回一个新的自动释放字符串,这两个字符串是并置的。

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

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

然后使用appendString方法:

[startString appendString:useableString]; 
+0

谢谢你,你的回答是正确的,但是我要给marzapower奖励'green tick',因为他的积分较少。 – Bongeh 2011-05-25 08:52:59

+0

你不应该。 @Amorya的解决方案效率更高,因为它使用'NSMutableString'来附加字符串,这导致更有效的内存使用,尤其是当您重复添加** lot **字符串时。 – marzapower 2011-05-25 08:55:32

+0

啊,好的,那么多亏了你们:) – Bongeh 2011-05-25 08:56:36

3

你应该改变你的代码,如下所示:

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

您没有更新循环中的startString

+0

谢谢,我会尽快接受这个答案! (3分钟) – Bongeh 2011-05-25 08:53:23

+0

请在@ Amorya的回答中阅读我的意见。 – marzapower 2011-05-25 08:56:47