2010-08-28 17 views
1

Je ne vois pas pourquoi cela ne fonctionne pas. J'ai deux entités, appelons-les Employés et Départements. Et Departments a un attribut String appelé division. Cela fonctionne parfaitement:L'égalité avec l'attribut de chaîne CoreData ne fonctionne pas

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

La console montre, disons, "Worldwide Seafood". Mais si je tente une comparaison avec la même chaîne exacte, il échoue:

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

Rien affiche dans la console, à savoir la comparaison ne fonctionne pas comme il se doit.

Avez-vous du sens pour qui que ce soit? Merci.

Répondre

1

En utilisant == pour comparer NSObject cas (dans ce cas NSString cas) est une comparaison de pointeur depuis les instances Objective-C ne peut pas être créé sur la pile. Ainsi, votre code demande si l'instance NSStringemployee.department.division est le même pointeur (même emplacement de mémoire) qu'une chaîne statique. Ce n'est presque certainement pas le cas.

Vous devez utiliser

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

Plus généralement, vous devez utiliser -[NSObject isEqual:] pour comparer des instances d'objet.

+0

Merci! Cela a fonctionné, et l'explication est vraiment utile! – ed94133

1

Essayez plutôt if ([employee.department.division isEqualToString:@"Worldwide Seafood"])...