Convertir NSCFString a NSString

Estoy recibiendo un dictionary del server

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

Ahora quiero verificar el valor de la "position" de la llave en si condición

Lo estoy haciendo así

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

pero el tipo de datos de [myDictionary valueForKey:@"position"] es _NSCFString , por lo que no compara correctamente el valor y nunca entra si loop incluso el valor es correcto.

¿Cómo lo convierto en NSString para que pueda compararlo en condición?

He visto estas preguntas …

La instancia NSString informa su class como NSCFString

Obtener un NSString desde un NSCFString

NSString o NSCFString en xcode?

a partir de estas preguntas, acabo de saber que NSString es realmente una class de contenedor para diferentes types de objects de cadena. En general, un constructor NSString devuelve un object que en realidad es de tipo NSCFString , que es un envoltorio delgado alnetworkingedor de la struct Core Foundation CFString .

pero no me ayudaron … y nadie realmente dijo cómo convertir en NSString, así que por favor no lo marques como duplicado.

No necesita convertir _NSCFString a NSString . Como una subclass de NSString se garantiza que responde a -isEqualToString: (y cualquier otro método en NSString ). Tu problema no viene de la cadena, es probable que provenga de myDictionary . Intente registrar todas las keys en el dictionary y asegúrese de que se está comportando como se esperaba.

CFString s se puede convertir en NSString s según los documentos

NSString es " puenteo sin cargo " con su homólogo de la Fundación Core, CFStringRef . Consulte "Bridging gratuito" para get más información sobre el puente sin cargo.

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

Realmente quieres averiguar por qué los valores no son iguales. Separe las llamadas de su método:

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