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
      }
  }
Другие вопросы по тегам