2016-03-21 20 views
-2

Bir eklenti kullanıyorum, eklentinin pluginClass öğesinde "A" yöntemi var. "A" denir eğer , ben myCalss.Such içinde "B" aramak istediğiniz:ios yöntemde bir gözlemci nasıl eklenir?

-(void)A{ 
    [myClass B]; 
} 

Ama pluginClass içinde kodunu değiştirmek istemiyoruz. Bir yönteme veya benzerine gözlemci eklemenin bir yolu var mı? Teşekkür ederiz. Aklıma

+0

Sen "yalnızca – matt

+0

ben ifade cevabım ... varsayalım, o swizzle olabilir kabul edilebilir bir seçenek çünkü "swizzling her zaman çirkindir: D –

+0

Aslında şimdi swizzle kullanıyorum, başka bir şekilde aramaya çalışıyorum.": "- (void) viewDidLoad { [super viewDidLoad]; NSMethodSignature * sayHi = [self methodSignatureForSelector: @selector (sayHi)]; [[NSNotificationCenter defaultCenter] addObserver: sayHi seçici: @selector (sayHiRunning) name: @ "" object: nil]; [self sayHi]; } - (void) sayHiRunning { NSLog (@ "bbbbbb"); } - (void) sayHi { NSLog (@ "aaaaaaa"); } '' Fakat işe yaramıyor. – Pikachuode

cevap

0

kabul edilebilir tek seçenek eklentisinden sınıf alt sınıf olduğunu ve daha sonra ve hedef yöntemiyle üzerine alt sınıf içinde iletmeyi:

@implementation MyPluginClass : PluginClass 

-(void) A { 
    [super A]; 
    [myClass B]; 
} 

@end 
+0

Ama "A" dememeliyim ve eklenti otomatik olarak çalışıyor. – Pikachuode

+0

Kodum eklentiye dayanıyor, diğer geliştiriciler de eklentiyi kullanacak, bu yüzden bir alt sınıf oluşturamıyorum. – Pikachuode

0

gerçekten kolay bir çözüm gibi görünüyor. Bir işlevini içeren kendi yöntemi C yapın ve yerine A çağırma C. B yöntemi ekleyin, o zaman çağrı C.

// BEFORE 

[pluginClass A]; // a call to method A that u use originally. 

// AFTER 

[self C]; 

-(void)C { 
    [pluginClass A]; 
    [myClass B]; 
} 
+0

Teşekkür ederim, ama ben "A" kendimi aramak zorunda olmamalı, her zaman eklenti tarafından çağrılacak.Ve sadece dinlemek istiyorum. – Pikachuode

İlgili konular