コードには 2 つの問題があります。1 つは特定されて回答されましたが、もう 1 つは回答されませんでした。1 つ目は、セレクターにパラメーターの名前がないことです。ただし、それを修正したとしても、修正されたメソッド シグネチャに複数の引数が含まれていると仮定すると、この行は依然として例外を発生させます。修正されたメソッドが次のように宣言されているとしましょう。
-(void)myTestWithString:(NSString *)sourceString comparedTo:(NSString *)testString ;
複数の引数を取るメソッドのセレクターを作成することは完全に有効です (例: @selector(myTestWithString:comparedTo:) )。ただし、performSelector メソッドでは、残念ながら複数のパラメーターを持つ myTest に 1 つの値しか渡すことができません。エラーが発生し、十分な値を指定しなかったことが通知されます。
メソッドを再定義して、コレクションを唯一のパラメーターとして受け取ることができます。
-(void)myTestWithObjects:(NSDictionary *)testObjects ;
ただし、より洗練されたソリューションがあります (リファクタリングを必要としません)。答えは、NSInvocation とそのメソッドを使用することsetArgument:atIndex:
ですinvoke
。
詳細が必要な場合は、コード例を含む記事を作成しました。スレッド化に重点が置かれていますが、基本は引き続き適用されます。
幸運を!