1

好的,我有两个包含数字的字符串,如下所示使用调试器:

字符串 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!");

}

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

4

2 回答 2

2

这可能是因为以下任何一个都是 FALSE

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

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

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

希望它可以帮助你。

于 2012-07-31T08:34:45.353 回答
1

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

例子:

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

在调试器中:

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

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

所以“po”知道实际的类,但“p”不知道。

于 2012-07-31T08:58:15.703 回答