【问题标题】:NSString or NSCFString in xcode?xcode中的NSString或NSCFString?
【发布时间】:2012-12-05 06:07:34
【问题描述】:

我正在像这样在 NSString 中获取一个 NSMutabledictionary 对象:

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

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

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

所以在比较时它有时会返回 nil。所以立即跳入 else 块。

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

我该怎么做?

【问题讨论】:

    标签: iphone xcode nsstring nscfstring


    【解决方案1】:

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

    在 Objective-C 中,框架由集群类填充;也就是说,您在文档中看到了一个类,实际上,它只是一个接口。相反,框架有自己的这些类的实现。例如,正如您所指出的,NSString 类通常由 NSCFString 类代替;还有一些其他的,比如NSConstantStringNSPathStore2,实际上是NSString 的子类,它们的行为就像你期望的那样。

    你的问题,就我所见...

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

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

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

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

    【讨论】:

    • 那我该怎么做,如何比较?
    • @Sindhia,当你发表评论时,我正在编辑我的答案,你现在应该有答案了。
    • 正如你所说,如果我将它与 if(state == nil) 进行比较,即使 state 不包含任何文本,它也会跳转到 else 块。当我看到控制台描述状态时,它会说...打印状态描述。就是这样。没有 null 或什么都没有..怎么办?
    • @Sindhia,你如何打印state?你没有在你的问题中表明这一点。
    • 我的意思是如果我将鼠标悬停在那个状态我可以看到。所以右键单击并打印描述
    【解决方案2】:

    你可以这样做

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

    【讨论】:

    • 即使文本是空的,我也没有得到它的工作。我可以知道这是什么:isKindOfClass:[NSNull class]]?
    • 能否请您 NSLog 为您的状态
    • 有时我得到 null 有时什么也没有 NSLog 为空时不会打印
    • 请问NSLog(@"Your dictionary > %@",d)
    • businessName = "Ewert 的 IBM 打字机服务";城市 = "";电话=“(559)732-3215”;状态 = "";街道 = "";邮编=“”;是我在数组中的字典之一
    【解决方案3】:

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

     NSString *state = (NSString *) [d valueForKey:@"State"];
    
      if(state != nil)
      {
          if(state.length > 0)
          {
               //string contains characters
          }
      }
    

    【讨论】:

    • 不,您不必进行类型转换。在 C 和 Objective-C 中,从一个指针类型到另一个指针类型的类型转换只会关闭编译器,它在运行时什么也不做。
    • k if typecasted how to compare?if(state==nil)?or something elz?
    • 不,我没有问这个。实际上状态应该比较它是 NSString 还是 NSCFString 返回 null 或 nil 或空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多