2016-03-21 62 views
-2

我正在使用一個插件,插件的pluginClass中有一個方法「A」。 如果「A」是所謂的,我想打電話給「B」在myCalss.Such爲:在ios中如何添加一個觀察者的方法?

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

但我不希望修改代碼插件類。 有什麼辦法可以將觀察者添加到方法或類似的方法嗎? 謝謝你。

+0

你可以調配的話,我想......我 – matt

+0

短語我的答案是「只可接受的選項「,因爲攪拌總是很難看:D –

+0

其實現在我正在使用swizzle,我試圖尋找其他方法。例如:'' - (void)viewDidLoad {super viewDidLoad]; NSMethodSignature * sayHi = [self methodSignatureForSelector:@selector(sayHi)]; [[NSNotificationCenter defaultCenter] addObserver:sayHi selector:@selector(sayHiRunning)name:@「」object:nil]; [self sayHi]; } - (void)sayHiRunning NSLog(@「bbbbbb」); } - (void)sayHi NSLog(@「aaaaaaa」); }'''但它不起作用。 – Pikachuode

回答

0

我能想到的唯一可接受的選擇是從插件繼承的類,然後你的子類在目標方法中,並將它轉發:

@implementation MyPluginClass : PluginClass 

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

@end 
+0

但是我不能調用「A」,並且它自動運行的插件本身。 – Pikachuode

+0

我的代碼基於插件,其他開發者也會使用插件,所以我不能創建子類。 – Pikachuode

0

似乎很容易解決。使包含一個函數你自己的方法C和C中增加而不是調用A的方法B,然後調用C.

// BEFORE 

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

// AFTER 

[self C]; 

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

謝謝你,但我不能自己打電話給「A」,它會一直被插件調用,而我只是想聽。 – Pikachuode

相關問題