好的,这是不言自明的。
假设我们有我们的可可应用程序。让我们都假设您已经有了一些“插件”,它们被打包为独立的可加载包。
这是当前加载包的方式(假设插件的“主类”实际上是一个NSWindowController
子类:
// Load the bundle
NSString* bundlePath = [[NSBundle mainBundle] pathForResource:@"BundlePlugin"
ofType:@"bundle"]
NSBundle* b = [NSBundle bundleWithPath:bundlePath];
NSError* err = nil;
[b loadAndReturnError:&err];
if (!err)
{
// if everything goes fine, initialise the main controller
Class mainWindowControllerClass = [b principalClass];
id mainWindowController = [[mainWindowControllerClass alloc] initWithWindowNibName:@"PluginWindow"];
}
现在,这是问题所在:
- 如何将我的一些主要应用程序的对象“发布”到插件?
- 如何让我的插件“了解”我的主应用程序的类?
- 是否有可能在它们之间实际建立某种通信,以便插件可以与我的主应用程序交互?如果是这样,怎么办?
旁注:
- 使用协议能否消除“未知选择器”错误和大量使用
performSelector:withObject:
? mainWindowController
显然,只要将它们定义为属性,我就可以设置和获取新创建的值。但这是对可可最友好的方式吗?