Kodunuzun iki sorunu vardır. Biri tanımlandı ve cevaplandı, ama diğeri olmadı. Birincisi, seçicinizde parametresinin adı eksikti. Bununla birlikte, bunu düzelttiğinizde bile, revize edilmiş yöntem imzanızın hala birden fazla argüman içerdiği varsayılarak, satır yine de bir istisna oluşturacaktır. Gözden geçirilmiş yönteminizin şu şekilde beyan edildiğini varsayalım:
-(void)myTestWithString:(NSString *)sourceString comparedTo:(NSString *)testString ;
Birden çok argüman alan yöntemler için seçiciler oluşturmak tamamen geçerlidir (örn. @Selector (myTestWithString: comparTo :)). Ancak performSelector yöntemi, maalesef birden fazla parametreye sahip olan myTest'e yalnızca bir değer iletmenize izin verir. Hata verecek ve size yeterli değer sağlamadığınızı söyleyecektir.
Bir koleksiyonu almak için yönteminizi her zaman parametresi olarak yeniden tanımlayabilirsiniz:
-(void)myTestWithObjects:(NSDictionary *)testObjects ;
Bununla birlikte, daha zarif bir çözüm var (bu yeniden düzenleme gerektirmiyor). Cevap NSInvocation'ı setArgument:atIndex:ve invokeyöntemleriyle birlikte kullanmaktır .
Daha fazla ayrıntı istiyorsanız, bir kod örneği de dahil olmak üzere bir makale yazdım . Odak diş çekme üzerinedir, ancak temeller hala geçerlidir.
İyi şanslar!