将NSCFString转换为NSString

我正在从服务器获取字典

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"]数据types是_NSCFString ,所以它不会正确地比较值,如果循环,即使值正确,也不会进入。

我如何将它转换成NSString以便我可以比较它在条件?

我看到了这些问题

NSString实例将其类作为NSCFString报告

从NSCFString获取NSString

xcode中的NSString或NSCFString?

从这些问题中我才知道, NSString实际上是一个不同types的string对象的容器类。 一般来说,一个NSString构造函数确实返回一个实际types为NSCFString的对象,这是一个围绕Core Foundation CFString struct的薄包装。

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

您不需要将_NSCFString转换为NSString 。 作为NSString的子类,它将保证响应-isEqualToString:NSString其他所有方法)。 你的问题不是来自string,可能是来自myDictionary 。 尝试logging字典中的所有密钥,并确保其行为与预期一致。

CFString s可以根据文档转换为NSString

NSString与Core Foundation的CFStringRef是“免费桥接”。 有关免费桥接的更多信息,请参阅“免费桥接” 。

 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 }