Если «a == b» является ложным при сравнении двух объектов NSString

У меня есть class с доступным методом, который возвращает NSString при вызове.

 [MyClass getMyString] 

Строковая переменная в этом classе фактически назначается в didSelectRowAtIndexPath: как didSelectRowAtIndexPath: :

 myString = cell.textLabel.text; 

Когда я получаю строку, вызывая этот метод, я назначаю ее другой строке в classе, который ее вызвал, и сравниваю ее со строкой, которую я определил

 NSString *mySecondString; mySecondString = @"my value"; if(mySecondString == myString){ i = 9; } 

Я прошел через код и каждый раз, когда он оценивает оператор if, он пропускает прямо мимо i=9 и переходит к следующему else if . Почему это должно быть? Почему они не оценивают одинаковое значение? Если вы наведете курсор на каждое из значений во время отладки, они покажут, что они имеют одинаковое значение, но по какой-то причине код не выполняет, как я ожидал, и назначил 9 i .

Есть предположения?

Вы предполагаете, что оператор C == выполняет строковое равенство. Это не так. Он выполняет равенство указателя (при вызове указателей). Если вы хотите выполнить настоящий тест равенства строк, вам нужно использовать метод -isEqual: (или специализация -isEqualToString: когда вы знаете, что оба объекта являются строками):

 if ([mySecondString isEqualToString:myString]) { i = 9; } 

Вы сравниваете указатели на строки, а не сами строки. Вам нужно изменить свой код на

 if (if([mySecondString isEqualToString:myString]) { .... } 

вы не можете использовать ‘==’ для сравнения двух NSString

вы должны использовать [NSString isEqualToString: (NSString *)] для сравнения двух строк

Вы не можете сравнить две строки, используя «==», это для int и других значений. вы можете использовать нижеприведенный код для сравнения двух строк

if ([Firststring isEqualToString: Secondstring]) {

  NSLog(@"Hello this both string is same "); 

}

Это базовая концепция указателя, вы отсутствуете. (YES, myString и mySecondString являются указателями на строку).

Теперь, if(mySecondString == myString) будет идти TRUE только если оба указателя указывают на одно и то же местоположение. (Которых они не будут в большинстве случаев)

Вы должны делать, if ([mySecondString isEqualToString:myString]) , который будет сравнивать содержимое вашей строки для равенства.

  • NULL против нуля в Objective-C
  • Координаты текстуры OpenGL в пиксельном пространстве
  • Программно извлекать использование памяти на iPhone
  • Создание пользовательского UIKeyBoard для iPhone
  • Как получить разницу во времени в iPhone
  • Может ли iPhone приложение блокировать телефонные звонки?
  • Как программно предотвратить переключение Mac на hibernate?
  • Как анализировать длительность ISO-8601 в Objective C?
  • Сортировка NSArray строк или объектов даты
  • Выполнение команды терминала из приложения Cocoa
  • Чтение аудио сэмплов через AVAssetReader
  • Давайте будем гением компьютера.