我在NSString中使用NSMutabledictionary对象,如下所示:
NSString *state=[d valueForKey:@"State"];
现在有时状态可能为空,有时会填充文本。所以我比较它。虽然比较状态有时会变成NSString而NSCFString othertimes ..因此无法获得所需的结果..
if([state isEqualToString@""])
{
//do something
}
else
{
//do something
}
因此,在比较时,它有时会返回nil。所以立即跳进else块。
我需要一种标准方法来比较状态是否为空,无论是NSString还是NSCFString ......
我该怎么做?
答案 0 :(得分:2)
如果您无法获得所需的结果,我可以向您保证,这不是因为您获得NSCFString
而非NSString
。
在Objective-C中,框架充满了集群类;也就是说,你在文档中看到了一个类,事实上,它只是一个接口。该框架具有自己的这些类的实现。例如,正如您所指出的,NSString
类通常由NSCFString
类表示;还有一些其他的,例如NSConstantString
和NSPathStore2
,它们实际上是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
}
}