2012-12-09 89 views
3

我正在執行一些字符串連接來創建數據庫查詢。 作爲其中的一部分,我需要分配並重新分配NSString變量以附加到它。什麼是附加到NSString的推薦方式

我目前使用此代碼:

NSString *retVal = [[NSString alloc]init]; 
NSString *concat = @""; 
retVal = [NSString stringWithFormat:@"%@%@ myfield= 'myvalue'", retVal, concat]; 

注意,只要retVal的和CONCAT持有「」(空字符串),我得到空字符串回來retVal的。這絕對不是我應該得到的「myfield ='myvalue'」。

我錯過了什麼?

更新:

這是我最後一次嘗試:

NSMutableString * retVal = [[NSMutableString alloc] init]; 
NSString * concat = @""; 

[retVal appendString:@"appendstring"]; 


NSLog(@"%@", retVal); // prints <object returned empty description> 

[retVal appendString:concat]; 
[retVal appendString:@"appendstring1"]; 

NSLog(@"%@", retVal); // prints %@ 
+0

爲什麼要先分配初始化retVal並重新分配給它? – 2012-12-09 21:16:12

+0

我複製並運行了你的代碼,它對我來說工作得很好 - 你在哪裏運行你的代碼?其他的東西是否可以將retVal設置爲空字符串? – redlightbulb

+0

對我來說工作也很好。你在哪裏登錄?我猜測retVal在您檢查時已被釋放。 – rdelmar

回答

1

要麼使用一個NSMutableStringappendString:,使用stringByAppendingString:,或用單stringWithFormat:構建完整的字符串,在你需要的所有值堵漏立刻。

+0

現在的問題是_注意每當retVal和concat保持「」(空字符串)時,我會在retVal中返回空字符串。這絕對不是我所期待的,因爲我應該得到「myfield ='myvalue'」._ OP已經知道如何附加字符串。 – iDev

+0

這段代碼給了我日誌中的空字符串:NSMutableString * retVal = [[NSMutableString alloc] init]; [retVal appendString:@「mystring」]; NSLog(@「%@」,retVal); –

+0

這種方法有效。問題是,我在if-else塊內移動指令指針。當我直接運行代碼時,它工作正常。指針的移動絕對與我所搞亂的任何字符串沒有關係,但它影響了串聯的字符串。可能在LLDB中存在一個錯誤。 –

2
NSString *retVal = @""; 
    NSString *concat = @""; 
    //do whatever stuff you want with retVal and concat 
    //once finished then do this below 
    if(retVal.length==0||concat.length==0) 
    { 
    retVal = @"myfield= 'myvalue'"; 
    } 
    else 
    retVal = [NSString stringWithFormat:@"%@%@ myfield= 'myvalue'", retVal, concat]; 
相關問題