-1

可能重复:
了解 Objective-C 中的 NSString 比较

代码

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是通过 AFNetworking 从服务器返回的 JSON 响应对象。

我不知道如何准确地将从服务器返回的字符串与常量字符串进行比较。subNodeDict 中的所有非字符串对象都可以正常工作。我需要使用某种类型的 UTF-8 编码吗?我怎样才能得到真正的价值节点类型?

4

2 回答 2

1

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

[nodeType isEqualToString:@"Collection"]

考虑一下:

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

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

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

于 2013-01-01T09:45:03.150 回答
0

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

[nodeType compare:@"Collection"]

compare方法在哪里NSString

于 2013-01-01T09:46:05.983 回答