【问题标题】:Convert NSCFString to NSString将 NSCFString 转换为 NSString
【发布时间】:2014-04-18 09:10:02
【问题描述】:

我正在从服务器获取字典

myDictionary = 
{
"rank":"1",
"color":"red",
"position":"middle"
}

现在我想检查 if 条件中键“位置”的值

我就是这样做的

if ([[myDictionary valueForKey:@"position"] isEqualToString:@"middle"]) {
        //do Some stuff
} else{
        //do some other stuff
}

但是[myDictionary valueForKey:@"position"]的数据类型是_NSCFString,所以它不能正确比较值,即使值正确也不会进入if循环。

如何将其转换为 NSString 以便在 if 条件下进行比较?

我看过这些问题..

NSString instance reports its class as NSCFString

Getting an NSString from an NSCFString

NSString or NSCFString in xcode?

从这些问题我才知道 NSString 实际上是一个用于不同类型字符串对象的容器类。通常,NSString 构造函数会返回一个实际上是 NSCFString 类型的对象,它是核心基础 CFString struct 的薄包装。

但他们没有帮助我..并且没有人真正告诉如何将其转换为 NSString,所以请不要将其标记为重复。

【问题讨论】:

  • 试试这个 if ([(NSString *)[myDictionary valueForKey:@"position"] isEqualToString:@"middle"])
  • 已经试过了..没用..

标签: ios objective-c nsstring nscfstring


【解决方案1】:

您无需将_NSCFString 转换为NSString。作为NSString 的子类,它保证响应-isEqualToString:(以及NSString 中的所有其他方法)。您的问题不是来自字符串,可能来自myDictionary。尝试记录字典中的所有键并确保其行为符合预期。

【讨论】:

  • 我知道它已经很久了,但是,请发布更多解释。谢谢。
  • @VladislavKan 查看here 的相关问题。 NSString 是所有子类的派生父类。
【解决方案2】:

CFStrings 可以根据文档转换为 NSStrings

NSString 与其核心基金会对应方CFStringRef 是“免费桥接”。有关免费桥接的更多信息,请参阅“Toll-Free Bridging”

NSString *nsString = @"Hello";
CFStringRef cfString = (CFStringRef) nsString;

您真的想弄清楚为什么这些值不相等。分离出你的方法调用:

NSString *positionValue = myDictionary[@"position"];
NSLog(@"Position value: %@", positionValue);
if ([positionValue isEqualToString:@"middle"]) {
    // do Some stuff
} else{
    // do some other stuff
}

【讨论】:

  • 仓位值注销什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 2016-01-17
  • 2012-02-29
相关资源
最近更新 更多