2010-02-22 9 views
1

Mon code:Pourquoi deux chaînes identiques ne sont-elles pas identiques?

stringFromRecievedData = 
    [[NSString alloc]initWithData:_data1 encoding:NSUTF8StringEncoding]; 

if (![stringFromRecievedData isEqualToString:lastStringFromRecievedData]) { 
    [lastStringFromRecievedData setString: stringFromRecievedData]; 

-je obtenir le même résultat « Different », même dans la seconde même quand il ronde est les mêmes données à chaque fois ...

Est-ce la bonne façon de comparer les deux?

Merci.

+0

Veuillez indiquer où et comment vous définissez 'lastStringFromReceivedData'. –

Répondre

4

Si lastStringFromRecievedData est une instance de NSString (ou une sous-classe telle que NSMutableString), alors c'est la manière correcte de comparer deux chaînes. Dans ce cas, il se peut que quelque chose d'autre fasse que vos chaînes ne soient pas égales. Cependant, il semble que lastStringFromRecievedData est un autre objet parce que vous appelez setString: dessus. Si c'est le cas, vous devez d'abord obtenir la chaîne de cet objet.

stringFromRecievedData = 
    [[NSString alloc]initWithData:_data1 encoding:NSUTF8StringEncoding]; 

// Assuming 'string' is the function to get the string from 'setString:' below 
NSString *otherString = [lastStringFromRecievedData string]; 

if (![stringFromRecievedData isEqualToString:otherString]) { 
    [lastStringFromRecievedData setString: stringFromRecievedData]; 
+0

lastStringFromRecievedData is NSMutableString- Vous suggérez donc d'utiliser [lastStringFromRecievedData string]? – Tiger

+0

Non, si c'est un 'NSMutableString' alors la comparaison devrait fonctionner. Quel genre de données est dans ces chaînes? –

+0

Les données proviennent d'une réponse Web, La seule façon d'obtenir ce résultat est si j'utilise un scanner sur la chaîne reçue pour l'analyser dans une nouvelle chaîne - dans ce cas la comparaison réussit. Je pensais qu'il y a quelque chose à propos du format de chaîne de caractères? – Tiger

0

Si tout ce que vous faites est à la recherche pour vous assurer que votre NSMutableString équivaut à une autre NSString, pourquoi ne pas faire quelque chose comme:

lastStringFromRecievedData = [stringFromRecievedData mutableCopy]; 

Ou:

[lastStringFromRecievedData setString:stringFromRecievedData]; 

La fin le résultat sera le même.

+0

Ce que vous avez écrit est exactement ce que j'ai fait de la première place. Relire la question - Le problème est lorsque je recréer stringFromRecievedData et essayer de savoir si elles sont égales Si elles ne sont pas, cela signifie que j'ai reçu de nouvelles données. Les deux chaînes sont identiques sur le journal, mais j'obtiens un résultat différent de celui-ci - c'est le problème. – Tiger

+0

Je reçois une chaîne de données et mon but est de savoir si j'ai déjà cette chaîne avant ou non. – Tiger