Конвертировать 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"] является _NSCFString, поэтому он не сравнивает значение должным образом и никогда не входит, если цикл даже значение является правильным.

как я могу преобразовать это в NSString чтобы я мог сравнить это в состоянии?

Я видел эти вопросы..

Экземпляр NSString сообщает свой класс как NSCFString

Получение NSString из NSCFString

NSString или NSCFString в xcode?

от этих вопросов я только что узнал, что NSString действительно контейнерный класс для различных типов строковых объектов. Обычно конструктор NSString возвращает объект, который на самом деле имеет тип NSCFString , которая является тонкой оберткой вокруг основы CFStringstruct ,

но они не помогли мне... и никто на самом деле не рассказывал, как конвертировать в NSString, поэтому, пожалуйста, не помечайте его как дубликат.

2 ответа

Решение

Вам не нужно конвертировать _NSCFString в NSString, Как подкласс NSString это гарантированно ответит на -isEqualToString: (и любой другой метод в NSString). Ваша проблема не исходит от строки, скорее всего, она исходит от myDictionary, Попробуйте зарегистрировать все ключи в словаре и убедитесь, что он работает так, как ожидалось.

CFString с можно привести к NSString S согласно документам

NSString "соединен бесплатно" со своим базовым аналогом, 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
}
Другие вопросы по тегам