Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ios中,如何向方法添加观察者?_Ios_Addobserver - Fatal编程技术网

在ios中,如何向方法添加观察者?

在ios中,如何向方法添加观察者?,ios,addobserver,Ios,Addobserver,我正在使用一个插件,插件的pluginClass中有一个方法“a”。 如果调用了“A”,我想在MyCals中调用“B”。例如: -(void)A{ [myClass B]; } 但我不想修改pluginClass中的代码。 有没有办法在方法或类似方法中添加观察者? 谢谢你。我能想到的唯一可接受的选择是从插件中对类进行子类化,然后在目标方法的子类中转发它: @implementation MyPluginClass : PluginClass -(void) A { [super

我正在使用一个插件,插件的pluginClass中有一个方法“a”。 如果调用了“A”,我想在MyCals中调用“B”。例如:

-(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”。我的代码基于这个插件,其他开发者也会使用这个插件,所以我不能创建子类。