Ваш код имеет две проблемы. Один был идентифицирован и ответил, а другой нет. Во-первых, в вашем селекторе отсутствовало имя его параметра. Однако даже если вы исправите это, строка все равно вызовет исключение, если ваша пересмотренная сигнатура метода все еще содержит более одного аргумента. Допустим, ваш исправленный метод объявлен как:
-(void)myTestWithString:(NSString *)sourceString comparedTo:(NSString *)testString ;
Создание селекторов для методов, которые принимают несколько аргументов, совершенно допустимо (например, @selector (myTestWithString: сравнениеTo :)). Однако метод executeSelector позволяет передать только одно значение myTest, который, к сожалению, имеет более одного параметра. Он выдаст ошибку и сообщит, что вы не указали достаточно значений.
Вы всегда можете переопределить свой метод для получения коллекции, так как это единственный параметр:
-(void)myTestWithObjects:(NSDictionary *)testObjects ;
Однако есть более элегантное решение (не требующее рефакторинга). Ответ заключается в использовании NSInvocation вместе с методами setArgument:atIndex:
и invoke
.
Я написал статью, включая пример кода , если вы хотите больше подробностей. Основное внимание уделяется многопоточности, но основы по-прежнему применяются.
Удачи!