valueForKey:
(и большинство других методов Какао) возвращает указатель (адрес памяти) на объект. Когда вы используете символ ==
, вы просто проверяете числовое значение этого указателя, а не фактическое значение строки. Когда вы используете isEqualToString:
, вы проверяете значение.
Эти два:
if ([dictionary valueForKey:@"aString"]==nil)
if ([dictionary valueForKey:@"aString"]==NULL)
более или менее эквивалентны, и оба теста "Был ли адрес возвращен равным нулю?", То есть, как valueForKey:
указывает, что для этого ключа не было найдено объекта. Если словарь содержит любой объект для этого ключа, независимо от его значения (например, даже пустой строки), этот оператор if возвращает false.
(Вы обычно используете версию nil
в Objective-C, как соглашение по стилю, как и все остальное)
Это:
if ([[dictionary valueForKey:@"aString"] isEqualToString:@""])
Проверяет фактическое значение строки, чтобы увидеть, является ли она строкой нулевой длины. Если в словаре нет объекта, он вернет false, поскольку при вызове isEqualToString:
(или почти любого другого метода) для указателя nil
вы всегда получаете ноль или false.