Если «a == b» является ложным при сравнении двух объектов NSString
У меня есть class с доступным методом, который возвращает NSString
при вызове.
[MyClass getMyString]
Строковая переменная в этом classе фактически назначается в didSelectRowAtIndexPath:
как didSelectRowAtIndexPath:
:
myString = cell.textLabel.text;
Когда я получаю строку, вызывая этот метод, я назначаю ее другой строке в classе, который ее вызвал, и сравниваю ее со строкой, которую я определил
- Как сделать естественный вид на NSArray?
- UIWebView не масштабирует контент для соответствия
- С ARC, что лучше: alloc или autorelease инициализаторы?
- Полужирный и нежирный текст в одном UILabel?
- Программный пример UIPickerView?
NSString *mySecondString; mySecondString = @"my value"; if(mySecondString == myString){ i = 9; }
Я прошел через код и каждый раз, когда он оценивает оператор if, он пропускает прямо мимо i=9
и переходит к следующему else if
. Почему это должно быть? Почему они не оценивают одинаковое значение? Если вы наведете курсор на каждое из значений во время отладки, они покажут, что они имеют одинаковое значение, но по какой-то причине код не выполняет, как я ожидал, и назначил 9
i
.
Есть предположения?
- drawRect не вызывается в моем подclassе UIImageView
- COMET (серверный клик для клиента) на iPhone
- Измените NSEvent для отправки другого ключа, кроме того, который был нажат
- Точка с запятой после имени метода в файле реализации Objective-C
- Добавление изображений в кнопки UIActionSheet, как в UIDocumentInteractionController
- Как масштабировать UIImageView пропорционально?
- как создать круглую кнопку?
- Как я могу округлить значение float до двух постсимвольных позиций?
Вы предполагаете, что оператор 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])
, который будет сравнивать содержимое вашей строки для равенства.