0

-call で渡したい NSSet オブジェクトがありますperformSelector

NSSet *myNSSetObject = [self getSet];

if (myNSSetObject.count != 1)
    return;

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5];

問題は、 Object が に空で到着することmyMethodです。performSelector は渡されたオブジェクトを保持するため、何が問題なのかわかりません。

私のメソッドは次のように定義されています

- (void)myMethod:(NSSet *)myNSSetParam {
   NSLog(@"Set count: %d", myNSSetParam.count);
   [do sth];
}

NSLog には次のように表示されます: Set count: 0


問題をさらに詳しく調べ、上記のカウントで既に示唆されているように、NSSet オブジェクトは実際に渡されますが、そのレコードは失われます。

NSSet がそのオブジェクトを保持しているということではありませんか?

4

5 に答える 5

1

最初のメッセージから戻った後(または投稿されたコードスニップの下に部分的に)、誤ってNSSet配信されたものを変更し[self getSet]ますか?後でセットからオブジェクトを削除すると、そのオブジェクトmyMethod:にアクセスできなくなります。

于 2010-12-06T21:11:53.253 に答える
1

myMethod実際に引数を取りますか?Objective-C のメソッド名とセレクターには、宣言に含まれるコロンが実際に含まれていることに注意してください。したがって、次のような方法:

 - (void)myMethod:(NSSet *)set;

@selector(myMethod:)末尾のコロンを含めて、で参照する必要があります。

于 2010-12-06T09:24:30.487 に答える
0

「ベースポインタ」の下に隠れている、変更可能なサブクラスではなくgetSet、実際のサブクラスを返しますか?可変の場合、0.5秒の遅延内でセットを変更することができます。セットを保持していても、変更を妨げることはありません。NSSetNSSetperformSelector:withObject:afterDelay:

于 2010-12-06T21:23:50.097 に答える
0

あなたは電話するべきです

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5];

代わりに (メッセージ名の後ろのコロンに注意してください)。

于 2010-12-06T09:25:07.970 に答える
0

もしかして

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5]

オブジェクトmyMethod:を取るメソッドだと思いますか?

于 2010-12-06T09:27:44.310 に答える