2010-02-22 104 views
1

我的代码:为什么两个相同的字符串测试不等?

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

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

我得到同样的“不等于”结果,即使在即使是相同的数据,每次第二廿四...

这是比较正确的方法他们俩?

谢谢。

+0

请说明你在哪里以及如何定义'lastStringFromReceivedData'。 – 2010-02-22 17:00:32

回答

4

如果lastStringFromRecievedDataNSString(或子类如NSMutableString)的实例,那么这是比较两个字符串的正确方法。在这种情况下,别的东西可能会导致你的字符串不相等。

但是,它看起来像lastStringFromRecievedData是一个其他的对象,因为你打电话setString:就可以了。如果是这种情况,您需要首先从该对象获取字符串。

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是NSMutableString- 所以你建议使用[lastStringFromRecievedData string]? – Tiger 2010-02-22 18:43:16

+0

不,如果它是'NSMutableString',那么比较就可以工作。这些字符串中有什么样的数据? – 2010-02-22 18:47:44

+0

该数据来自网络响应, 我得到这个工作的唯一方法是,如果我使用接收到的字符串上的扫描器将其扫描到一个新的字符串中,那么比较成功。 我认为有关于字符串格式的东西? – Tiger 2010-02-22 19:06:39

0

如果你正在做的是寻找,以确保您NSMutableString相当于另一个NSString,为什么不这样做:

lastStringFromRecievedData = [stringFromRecievedData mutableCopy]; 

或者:

[lastStringFromRecievedData setString:stringFromRecievedData]; 

结束结果将是相同的。

+0

你写的正是我所做的从第一位。 重新阅读问题 - 问题是当我重新创建stringFromRecievedData并尝试查明它们是否相等时 - 如果它们不是 - 它意味着我收到了新的数据。 这两个字符串在日志上都是相同的 - 但我得到的是他们不等于的保护 - 这是问题。 – Tiger 2010-02-23 04:13:27

+0

我从数据中获取一个字符串,我的目的是查明我是否已经得到了这个字符串。 – Tiger 2010-02-23 04:16:03

相关问题