【问题标题】:What is the recommended way to append to NSString附加到 NSString 的推荐方法是什么
【发布时间】:2012-12-09 21:13:19
【问题描述】:

我正在执行一些字符串连接来创建数据库查询。 作为其中的一部分,我需要分配和重新分配 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 %@

【问题讨论】:

  • 你为什么先分配初始化retVal然后重新分配给它?
  • 我复制并运行了你的代码,它对我来说很好——你在哪里运行你的代码?是否有其他东西将 retVal 设置为空字符串?
  • 对我也很好。你在哪里登录?我猜 retVal 在您检查时已被释放。
  • 我尝试了多种方法,但运行起来很奇怪,例如下面列出的 nsmutablestring 方法。我什至不记得我已经尝试了多少,但它的行为很奇怪。这个 iOS 5.1 模拟器,xcode 4.5。

标签: ios iphone cocoa-touch nsstring nsmutablestring


【解决方案1】:
    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];

【讨论】:

    【解决方案2】:

    要么使用NSMutableStringappendString:,使用stringByAppendingString:,或者使用单个stringWithFormat: 构造完整的字符串,同时插入你需要的所有值。

    【讨论】:

    • 问题是 请注意,每当 retVal 和 concat 持有“”(空字符串)时,我会在 retVal 中返回空字符串。这绝对不是预期的,因为我应该得到“myfield='myvalue'”。 OP 已经知道如何附加字符串。
    • 这段代码在日志中给了我空字符串: NSMutableString * retVal = [[NSMutableString alloc] init];[retVal appendString:@"mystring"]; NSLog(@"%@", retVal);
    • 这种方法有效。问题是,我在 if-else 块中移动指令指针。当我直接运行代码时,它起作用了。指针的移动绝对与我弄乱的任何字符串无关,但它影响了被连接的字符串。 LLDB 中可能存在错误。
    猜你喜欢
    • 2016-09-23
    • 2015-03-28
    • 2014-10-05
    • 2017-04-21
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2010-10-19
    • 2017-02-06
    相关资源
    最近更新 更多