将NSCFString转换为NSString

时间:2014-04-18 09:10:03

标签: ios objective-c nsstring nscfstring

我从服务器

获取字典
myDictionary = 
{
"rank":"1",
"color":"red",
"position":"middle"
}

现在我想在条件

中检查键“position”的值

我这样做

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

[myDictionary valueForKey:@"position"]的数据类型为_NSCFString,因此它不能正确地比较值,如果循环,即使值正确,也不会进入。

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

我见过这些问题..

NSString instance reports its class as NSCFString

Getting an NSString from an NSCFString

NSString or NSCFString in xcode?

从这些问题我才刚刚知道 NSString实际上是不同类型的字符串对象的容器类。通常,NSString构造函数确实返回一个实际类型为NSCFString的对象,它是Core Foundation CFString struct周围的薄包装。

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

CFString可根据文档

转换为NSString s
  

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
}