2011-05-25 112 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