OK、それはかなり自明です。
cocoa アプリケーションがあるとしましょう。独立したロード可能なバンドルとしてパッケージ化された「プラグイン」が既にいくつかあると仮定しましょう。
これは、バンドルが現在どのようにロードされているかです (プラグインの「プリンシパル クラス」が実際には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
明らかに、プロパティとして定義されている限り、新しく作成したものとの間で値を設定および取得できます。しかし、これが最も Cocoa に適した方法でしょうか?