isEqualToString错误

时间:2012-07-31 08:12:49

标签: iphone objective-c ios

Okey,我有两个字符串,包含使用调试器显示的数字:

字符串1

(gdb) po [event creator_id]
123456789
(gdb) p [event creator_id]
$1 = (NSString *) 0xad81d10

字符串2

(gdb) po [delegate userid]
123456789
(gdb) p [delegate userid]
$2 = (NSString *) 0x7451b40

现在我想检查它们是否彼此相等,其中存在问题。

以下if语句由于某种原因不会返回true:

if ([[delegate userid] isEqualToString: [event creator_id]]) {

    NSLog(@"They are equal!");

}

有人可以向我解释这是怎么发生的吗?谢谢你的时间!

2 个答案:

答案 0 :(得分:2)

可能是因为下面的任何一个都是假的

[[delegate userid] isKindOfClass:[NSString class]]

[[event creator_id] isKindOfClass:[NSString class]]

po是“print-object”,它打印对象的描述(字符串)。描述属性在NSObject级别可用。

希望它对你有所帮助。

答案 1 :(得分:1)

许多方法返回id,可以将其分配给任何NSObject指针,而不会生成编译器错误或警告。而gdb" p" command仅使用从源代码生成的类型信息,并且不会在运行时确定实际的类。

示例:

NSString *s;
s = [NSArray arrayWithObject:@"Hello World"];

在调试器中:

(gdb) po s
<__NSArrayI 0x8ec70a0>(
Hello World
)

(gdb) p s
$1 = (NSString *) 0x8ec70a0

所以&#34; po&#34;知道实际的课程,但是&#34; p&#34;没有。