提问人:user3470496 提问时间:7/14/2020 最后编辑:user3470496 更新时间:7/15/2020 访问量:26
在 Objective-C 中实现一种方法,组合插件
implementing one method from another in Objective-C, combining plugins
问:
我正在尝试组合两个用 Objective-C 编写的插件。我有 Plugin1 和 Plugin2,它们独立执行得足够好。我正在尝试将 Plugin2.m 代码添加到我的 Plugin1 Classes 文件夹并同时执行两者。
当我这样做时,Plugin1.m 似乎首先执行,我猜是因为它有 IBAction 调用而 Plugin2.m 没有?这很好,但我想在 Code1.m 中的函数中运行 Plugin2.m。因此,在下面的代码中,当 Plugin1 中的 IBAction 调用启动时,我希望它执行 Plugin2 通常执行的操作,然后继续使用 Plugin1 方法。
插件1.h:
#import Plugin2.h
@interface Plugin1: NSWindowController {
...
}
+(void) Plugin2;
@end
插件1.m:
#import "Plugin1.h"
#import "Plugin2.h"
@implementation Plugin1
-(id) loadPlugin1
{
...
}
-(IBAction) computeStuff:(id)sender
{
[self Plugin2];
//Plugin2* testRun = [Plugin2 alloc] init];
...do other stuff
}
@end
插件2.h
@interface Plugin2 : PluginFilter {
...
}
@end
插件2.m:
#import Plugin2.h
@implementation Plugin2
-(void) initPlugin
{
...
}
@end
不幸的是,我无法从 Xcode 中解决这个问题,我必须在我的程序上安装并测试插件进行测试。但是当我密切关注控制台并尝试上述操作时,我得到“-[Plugin1 Plugin2]:无法识别的选择器发送到实例0x7....
答:
0赞
Ol Sen
7/15/2020
#1
在您定义的 plugin1 接口中
+(void)plugin2;
但没有实现任何方法
+(void)plugin2 {
}
调用方法时,需要告诉从哪个类调用方法,因为 self 引用的是对象而不是类。+
[self.class plugin2];
// OR
[Plugin1 plugin2];
提示:尝试遵循 objective-c 中的命名约定。
这将帮助您区分定义是否为 or-method:
Class
考虑阅读有关设计模式和delegate
<Protocols>
此外,在 Plugin2 实现中定义 special 并使用返回类型。否则,您将不初始化任何内容。-initPlugin
-(instancetype)initPlugin;
评论