1

わかりました、デバッガーを使用して、ここに示すような数字を含む 2 つの文字列があります。

文字列 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は「print-object」であり、オブジェクトの説明(文字列)を出力します。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 に答える