1

呼び出そうとしているメソッドを実装しているオブジェクトから performSelector:withObject: を呼び出すと、EXC_BAD_ACCESS 例外が発生します。これが私のコードです

SEL newSelector = NSSelectorFromString(@"mySelector:withCustomObject:");
[self performSelector:newSelector withObject:myCustomObject];

これにより、クラッシュが発生します。しかし、私がこれを行うとき

[self performSelector:@selector(mySelector:withCustomObject:) withObject:myCustomObject];

できます。

なぜこれが起こっているのかについてのアイデアはありますか? PS: どのパラメータも nil ではありません。

より多くのコード:

// My code to call this method
SEL newSelector = NSSelectorFromString(@"mySelector:withCustomObject:");
[self performSelector:newSelector withObject:self withObject:myCustomObject];

// this code is NOT called.
- (void) mySelector:(jObject *)sender withCustomObject:(jEvent *)customObject
{
    NSDictionary *handlerData = [aProperty objectAtIndex:[event positionInMethodStack]];
    NSString *newTitle = [handlerData objectForKey:@"newTitle"];
}
4

1 に答える 1

5

"mySelector:withCustomObject:"次のような 2 つの引数を持つメソッドのシグネチャです。

- (void)mySelector:(id)firstArgument withCustomArgument:(id)secondArgument { ... }

しかし、 を呼び出すとperformSelector:withObject:、引数が 1 つだけのメッセージが に送信されmySelectorます。2 番目の引数が定義されていないため、おそらくクラッシュが発生します。

したがって、mySelector実際に 2 つの引数がある場合は を使用しperformSelector:withObject:withObject:、それ以外の場合はセレクターのシグネチャを修正します。

于 2012-08-21T20:41:19.207 に答える