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!");
}
有人可以向我解释这是怎么发生的吗?谢谢你的时间!
答案 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;没有。