【问题标题】:Objective-C: Comparing normal strings and strings found in NSMutableArraysObjective-C:比较 NSMutableArrays 中的普通字符串和字符串
【发布时间】:2011-04-09 08:58:15
【问题描述】:

我对字符串感到困惑(恐怕是初学者的问题):

我有一个名为 Notebook 的 NSMutableArray。在索引位置 1,我有一个对象,我认为它是一个字符串。至少我把它放到数组中是这样的:

[NoteBook replaceObjectAtIndex:1 withObject:@"x-x-x-x"];

到目前为止一切顺利。如果我把它放到 UILabel 中,它会在我的屏幕上显示 x-x-x-x。当我尝试将此字符串与其他字符串进行比较时,噩梦就开始了。让我们考虑一下,我不想在屏幕上显示字符串 x-x-x-x,而只是想有一个空白。所以我想我可以通过编码来实现这一点:

    NSString *tempDateString;
tempDateString = [NSString stringWithFormat:@"%@",[NoteBook objectAtIndex:1]];

if (tempDateString == @"x-x-x-x") {

        UISampleLabel.text = @"";

    }

由于某种原因,这不起作用,即即使我的数组位置 1 处的字符串是“x-x-x-x”,它仍然不会将我的 UISampleLabel 设置为空。

我想我对 @"" 标记感到困惑。我什么时候真正需要它们?为什么我不能简单地编码 tempDateString = [NoteBook objectAtIndex:1]; 而没有格式化的东西?

非常感谢任何帮助和建议!

【问题讨论】:

    标签: iphone objective-c cocoa-touch nsmutablearray nsarray


    【解决方案1】:

    您需要将字符串与 isEqualToString 进行比较:

    if ([tempDateString isEqualToString:@"x-x-x-x"]) {
      UISampleLabel.text = @"";
    }
    

    【讨论】:

      【解决方案2】:

      除了已回答的问题:

      为什么我不能简单地编码 tempDateString = [NoteBook objectAtIndex:1]; 而没有格式化?

      你可以。为什么你认为你不能?

      【讨论】:

      • 你可以。但请记住,您从 objectAtIndex:1 获得的实例是一个自动释放对象。如果你想在方法之外使用它,你必须保留它。 ;-)
      • 谢谢,但从+stringWithFormat: 返回的实例也是如此。此外,我不是为了自己的利益——我在问 n.evermind 为什么 he 认为上面需要+stringWithFormat:。他的回答可能揭示了一个我们可以帮助澄清的误解。
      • 感谢您的 cmets。实际上,我对 @"" 的事情仍然很困惑。我想我需要这个来表明我们正在处理一个字符串,不是吗?如果我用 stringWithFormat 声明一些东西有区别吗?
      • 不,最终结果没有区别 - 无论哪种方式,它都是一个字符串对象。 @"" 只是一个方便的快捷方式,可让您在代码中直接声明文字字符串值。 +stringWithFormat: 当你想将一堆东西格式化成一个字符串时很有用,比如someString = [NSString stringWithFormat:@"This:%d That:%d The other:%@", this, that, theOther]。请注意,您使用 @"" 创建的格式字符串只是一个 NSString 实例,就像任何其他实例一样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多