NSString или NSCFString в xcode?
Я беру NSMutabledictionary объект в NSString, как это:
NSString *state=[d valueForKey:@"State"];
Теперь иногда состояние может быть нулевым, а иногда заполнено текстом. Так что я сравниваю его. Иногда состояние сравнения становится NSString, а иногда - NSCFString.. Так что не удается получить желаемый результат.
if([state isEqualToString@""])
{
//do something
}
else
{
//do something
}
Так что при сравнении он иногда возвращает ноль. Так что сразу же прыгаем в блок else.
Мне нужен стандартный способ сравнения, если состояние пусто, является ли это NSString или NSCFString ...
Как мне это сделать?
3 ответа
Если вы не можете получить желаемый результат, я могу заверить вас, что это не потому, что вы получаете NSCFString
вместо NSString
,
В Objective-C структура заполнена кластерными классами; то есть, вы видите класс в документации, и на самом деле это просто интерфейс. Фреймворк имеет вместо этого свои собственные реализации этих классов. Например, как вы заметили, NSString
класс часто представлен NSCFString
класс вместо; и есть несколько других, как NSConstantString
а также NSPathStore2
, которые на самом деле являются подклассами NSString
и это будет вести себя так, как вы ожидаете.
Ваша проблема, из того, что я вижу...
Теперь иногда состояние может быть нулевым, а иногда заполнено текстом.
... что в Objective-C законно вызывать метод nil
, (Nil
является концепцией Objective-C null
в других языках, таких как C# и Java.) Однако, когда вы делаете, возвращаемое значение всегда обнуляется; так что если вы строка nil
, любое сравнение на равенство, выполненное методом, вернет NO
, даже если вы сравните с nil
, И даже тогда, пожалуйста, обратите внимание, что пустая строка не то же самое, что nil
, поскольку nil
можно рассматривать как отсутствие чего-либо. Пустая строка не имеет символов, но, по крайней мере, она есть. nil
значит нет ничего
Таким образом, вместо использования метода для сравнения state
в пустую строку, вам, вероятно, нужно проверить, что state
не является nil
, используя простое равенство указателей.
if(state == nil)
{
//do something
}
else
{
//do something
}
Вы можете сделать это
if([state isEqualToString:@""])
{
//do something
}
else
{
//do something
}
Вы должны набрать приведение, чтобы получить правильный ответ.
NSString *state = (NSString *) [d valueForKey:@"State"];
if(state != nil)
{
if(state.length > 0)
{
//string contains characters
}
}