在ios中,如何向方法添加观察者?
我正在使用一个插件,插件的pluginClass中有一个方法“a”。 如果调用了“A”,我想在MyCals中调用“B”。例如:在ios中,如何向方法添加观察者?,ios,addobserver,Ios,Addobserver,我正在使用一个插件,插件的pluginClass中有一个方法“a”。 如果调用了“A”,我想在MyCals中调用“B”。例如: -(void)A{ [myClass B]; } 但我不想修改pluginClass中的代码。 有没有办法在方法或类似方法中添加观察者? 谢谢你。我能想到的唯一可接受的选择是从插件中对类进行子类化,然后在目标方法的子类中转发它: @implementation MyPluginClass : PluginClass -(void) A { [super
-(void)A{
[myClass B];
}
但我不想修改pluginClass中的代码。
有没有办法在方法或类似方法中添加观察者?
谢谢你。我能想到的唯一可接受的选择是从插件中对类进行子类化,然后在目标方法的子类中转发它:
@implementation MyPluginClass : PluginClass
-(void) A {
[super A];
[myClass B];
}
@end
似乎真的很容易解决。制作包含函数的方法C,并在C中添加方法B。然后调用C,而不是调用A
// BEFORE
[pluginClass A]; // a call to method A that u use originally.
// AFTER
[self C];
-(void)C {
[pluginClass A];
[myClass B];
}
我想你可以用swizzle,我把我的答案说成是“唯一可以接受的选项”,因为swizzle总是很难看:事实上,现在我在用swizzle,我正试图寻找其他的方法。比如:
-(void)viewDidLoad{[super viewDidLoad];NSMethodSignature*sayHi=[self-methodSignatureForSelector:@selector(sayHi)][[NSNotificationCenter defaultCenter]addObserver:sayHi选择器:@selector(sayHiRunning)name:@“对象:nil];[self sayHi];}-(void)sayHiRunning{NSLog(@“bbbbbbb”);}-(void)sayHi{NSLog(@“aaaaaaaaa”);}
但它不起作用。@DavidBerry“swizzling总是很丑”但是合法的,基础性的基础是如何运作的。关键价值观使用的是观察-观察是OP想要做的事情。谢谢,但是我不能自己称为“A”,它会一直被插件调用。我只想听它。但是我不能叫“A”。我的代码基于这个插件,其他开发者也会使用这个插件,所以我不能创建子类。