比较两个字符串

时间:2010-08-02 16:19:32

标签: iphone

我使用isEqualToString比较两个字符串?如下:

   if ( [ somethingString isEqualToString: @"MyString" ]   )
   { //do something } else { //do something else }

现在,我已经使用somethingString检查了NSLog,看起来没问题,因为它显示了我的预期。但是,if语句不起作用。

我在想,即使调试器在执行if之前显示了该对象,该类型或其他东西也不对。

somethingString来自UIPickerView,其中填充了一系列对象......如果这有任何区别。

有什么想法吗?

PS。我尝试过使用比较:这肯定不起作用。

5 个答案:

答案 0 :(得分:0)

你应该if ([somethingString compare: @"MyString"] == NSOrderedSame) { //do stuff }

答案 1 :(得分:0)

您没有提供足够的信息。如果somethingStringNSString的子类(如果不是,它可能不会首先实现isEqualToString:)并且其值等于“MyString”,则{{1} }将返回[somethingString isEqualToString: @"MyString"]

答案 2 :(得分:0)

您是否可以发布simple, self-contained example代码无效的代码? isEqualToString是正确的调用方法,问题将出现在其他地方。你确定这两个对象都有效吗?也许其中一个已被解除分配或nil。你不是把指针等价(foo == bar)与内容等价([foo isEqualToString:bar])混淆了吗?

答案 3 :(得分:0)

根据zoul的要求,这里是代码和日志......

母亲= @“母亲”;

if([savedFirstNotice isEqualToString:mother])

    { NSLog ( @"Mother was triggered") }

    else 

    {      NSLog (@"Mother was not choosen");
           NSLog (@"savedFirstNotice is:  %@", savedFirstNotice);
           NSLog (@"mother is:  %@", mother);
    }

2010-08-02 20:34:16.337 SafetyKnight [4492:307]母亲没有被选中

2010-08-02 20:34:16.338 SafetyKnight [4492:307] savedFirstNotice是:母亲
2010-08-02 20:34:16.339 SafetyKnight [4492:307]母亲是:母亲

另请注意,savedFirstNotice已声明为NSString。似乎母亲相当于母亲而“母亲被触发”应该是正确的反应。

答案 4 :(得分:0)

对于那些无法弄清楚isEqualToString正在做什么的新手,我这样做是为了解决我的问题。

(1)检查两个字符串是否为CFEqual。 (2)在这两种情况下,按字符解析字符串。在我的情况下,两个字符串长度不相同,从调试器到我没有意义。解析savedFirstNotice字符串后,无论出于何种原因,应用程序在字符串前面添加一个空格,在字符串后面添加两个空格。到目前为止,它似乎是一个一致的操作,所以我很容易从我在方法中使用的所有变量中消除它。

感谢大家的建议 - 那些有效且不起作用的人给了我思考的想法或想法。

以下是发现我的问题的代码:

if (CFEqual (savedFirstNotice , mother ))
    { NSLog (@" Both savedFirstNotice and mother are Equal") ; }
      else
      { NSLog ( @" savedFirstNotice and mother are NOT Equal ") ;
    NSLog ( @" The length of savedFirstNotice is %d", savedFirstNotice.length );
    NSLog ( @" The length of mother is %d", mother.length );
    NSLog ( @" savedFirstNotice character 0 %c ",[ savedFirstNotice characterAtIndex: 0 ]);
    NSLog ( @" savedFirstNotice character 1 %c ",[ savedFirstNotice characterAtIndex: 1 ]);
                       // duplicate to capture the entire string
          }

另外,我建议您阅读有关CFEqual和相关项目的Apple文档。