Равенство со строковым атрибутом CoreData не работает - PullRequest
1 голос
/ 29 августа 2010

Я не понимаю, почему это не работает. У меня есть две организации, назовем их сотрудниками и отделами. А у Отделов есть строковый атрибут, называемый делением. Это прекрасно работает:

NSLog(@"Division: %@",employee.department.division);

Консоль показывает, скажем, "Worldwide Seafood". Но если я попытаюсь провести сравнение с точно такой же строкой, произойдет сбой:

if(employee.department.division == @"Worldwide Seafood") NSLog(@"Works in seafood!");

В консоли ничего не отображается, т. Е. Сравнение не работает должным образом.

Имеет смысл для кого-нибудь? Спасибо.

Ответы [ 2 ]

1 голос
/ 29 августа 2010

Использование == для сравнения NSObject экземпляров (в данном случае NSString экземпляров) является сравнением указателей, поскольку экземпляры Objective C не могут быть созданы в стеке.Таким образом, ваш код спрашивает, является ли NSString экземпляр employee.department.division таким же указателем (в той же ячейке памяти), что и статическая строка.Это почти наверняка не так.

Вы должны использовать

[employee.department.division isEqualToString:@"Worldwide Seafood"]

В целом, вы должны использовать -[NSObject isEqual:] для сравнения экземпляров объекта.

1 голос
/ 29 августа 2010

Попробуйте вместо этого if ([employee.department.division isEqualToString:@"Worldwide Seafood"])...

...