xcode中的NSString或NSCFString?

时间:2012-12-05 06:07:34

标签: iphone xcode nsstring nscfstring

我在NSString中使用NSMutabledictionary对象,如下所示:

NSString *state=[d valueForKey:@"State"];

现在有时状态可能为空,有时会填充文本。所以我比较它。虽然比较状态有时会变成NSString而NSCFString othertimes ..因此无法获得所需的结果..

if([state isEqualToString@""])
{
//do something 
}
else
{
//do something
}

因此,在比较时,它有时会返回nil。所以立即跳进else块。

我需要一种标准方法来比较状态是否为空,无论是NSString还是NSCFString ......

我该怎么做?

3 个答案:

答案 0 :(得分:2)

如果您无法获得所需的结果,我可以向您保证,这不是因为您获得NSCFString而非NSString

在Objective-C中,框架充满了集群类;也就是说,你在文档中看到了一个类,事实上,它只是一个接口。该框架具有自己的这些类的实现。例如,正如您所指出的,NSString类通常由NSCFString类表示;还有一些其他的,例如NSConstantStringNSPathStore2,它们实际上是NSString的子类,并且行为与您期望的一样。

你的问题,从我看到的......

  

现在有时状态可能为空,有时会填充文本。

...就是在Objective-C中,在nil上调用方法是合法的。 (Nil是其他语言(如C#和Java)中null的Objective-C概念。)但是,当您这样做时,返回值始终为零;因此,如果您的字符串为nil,那么即使您与NO进行比较,与方法进行的任何相等比较也会返回nil。即便如此,请注意空字符串nil不同,因为nil可以被视为没有任何内容。一个空字符串没有字符,但是嘿,至少它在那里。 nil意味着什么都没有。

因此,您可能需要使用简单的指针相等来检查state是否为state,而不是使用方法将nil与空字符串进行比较。

if(state == nil)
{
    //do something 
}
else
{
    //do something
}

答案 1 :(得分:1)

你可以这样做

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

答案 2 :(得分:-1)

您必须输入强制转换才能获得正确答案。

 NSString *state = (NSString *) [d valueForKey:@"State"];

  if(state != nil)
  {
      if(state.length > 0)
      {
           //string contains characters
      }
  }