Question

Comment puis-je vérifier la clé dans le dictionnaire est identique à la chaîne dans le paramètre de méthode? i.e. en dessous de code, dictobj est l'objet de NSMutableDictionary, et pour chaque clé dictobj i besoin de comparer avec la chaîne. Comment y parvenir? Au cas où je Typecase clé NSString ??

-(void)CheckKeyWithString:(NSString *)string
{
   //foreach key in NSMutableDictionary
   for(id key in dictobj)
     {
       //Check if key is equal to string
       if(key == string)// this is wrong since key is of type id and string is of NSString,Control doesn't come into this line
          {
           //do some operation
          }
     }
}
Était-ce utile?

La solution

Lorsque vous utilisez l'opérateur ==, vous comparez les valeurs de pointeur. Cela ne fonctionnera que lorsque les objets que vous comparez sont exactement le même objet, à la même adresse de mémoire. Par exemple, ce code renvoie These objects are different parce que même si les chaînes sont les mêmes, ils sont stockés à des endroits différents dans la mémoire:

NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if(foo == bar)
    NSLog(@"These objects are the same");
else
    NSLog(@"These objects are different");

Lorsque vous comparez des chaînes, vous voulez généralement de comparer le contenu textuel des chaînes plutôt que leurs pointeurs, vous devez donc la méthode -isEqualToString: de NSString. Ce code renvoie These strings are the same car il compare la valeur des objets chaîne plutôt que leurs valeurs de pointeur:

NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if([foo isEqualToString:bar])
    NSLog(@"These strings are the same");
else
    NSLog(@"These string are different");

Pour comparer arbitraire Objective-C des objets, vous devez utiliser la méthode isEqual: plus générale de NSObject. -isEqualToString: est une version optimisée de -isEqual: que vous devez utiliser lorsque vous savez que les deux objets sont des objets NSString.

- (void)CheckKeyWithString:(NSString *)string
{
   //foreach key in NSMutableDictionary
   for(id key in dictobj)
     {
       //Check if key is equal to string
       if([key isEqual:string])
          {
           //do some operation
          }
     }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top