字符串不等于其假定值

时间:2013-01-01 09:41:00

标签: objective-c string afnetworking

  

可能重复:
  Understanding NSString comparison in Objective-C

代码

NSString *nodeType = [subNodeDict objectForKey:@"nodeType"];
NSLog (@"nodeType = %@", nodeType);
NSLog (@"(nodeType == @\"Collection\") = %d", nodeType == @"Collection");
NSLog (@"[nodeType class] = %@ and [@\"Collection\" class] = %@", [nodeType class], [@"Collection" class]);

日志

2013-01-01 04:06:37.895 GoogleClient[4752:c07] <strong>nodeType = Collection
2013-01-01 04:06:37.896 GoogleClient[4752:c07] <strong>(nodeType == @"Collection") = 0
2013-01-01 04:06:37.896 GoogleClient[4752:c07] 

<strong>[nodeType class] = __NSCFString and [@"Collection" class] = __NSCFConstantString

subNodeDict是一个JSON响应对象,通过AFNetworking从服务器返回。

我无法弄清楚如何准确地将从服务器返回的字符串与常量字符串进行比较。 subNodeDict中的所有非字符串对象都可以正常工作。我需要使用某种类型的UTF-8编码吗?如何获得trueType的真值?

2 个答案:

答案 0 :(得分:1)

==正在比较两个指针,而不是字符串的内容。要比较NSString使用isEqualToString:方法。

[nodeType isEqualToString:@"Collection"]

考虑一下:

NSString *foo = @"abc";
NSString *bar = @"abc";

foo == bar; // false
[foo isEqualToString:bar]; // true

foo == bar是错误的,因为它们是不同的指针,即使它们的内容相同。

答案 1 :(得分:0)

您不应该将==用于字符串,因为这是指针比较,而是执行以下操作:

[nodeType compare:@"Collection"]

其中compareNSString

中的方法