1

わかりました。いくつかのリソースとサンプル コード (このなど) を調べましたが、これは非常に単純なはずですが、まだ答えが見つかりません。

1 つの小さな詳細を除いて、(外部バンドルをロードして統合するための)すべてを機能させることができました。

以下を使用して、バンドルから「メイン」クラスを取得します。

NSString* bundlePath = [[NSBundle mainBundle] pathForResource:@"MyBundle" 
                                                       ofType:@"plugin"];
NSBundle* myBundle = [NSBundle bundleWithPath:bundlePath];
Class someClass = [myBundle principalClass];

問題は、バンドル内の「principalClass」をどのように (そしてどこで) 設定できるかということです。

4

1 に答える 1

1

この問題の解決策はかなり単純です (最初のプロジェクトに加えられた変更を実際に更新しない Xcode のバグに関連する私自身の問題を除外する場合)。

@AnoopVaidyaも指摘したように、あなたinfo.plistの を開いて、NSPrincipalClassキーがそこになくても、その値を実際の「プリンシパルクラス」の名前に設定してください。

Clean and Re- Buildを実行すると、バンドルのプリンシパル クラスが適切に認識されるはずです。

ドキュメンテーション :

NSBundle は、2 つの方法のいずれかでプリンシパル クラスを見つけます。まず、バンドルの情報プロパティ リストで NSPrincipalClass キーを探します。キーが存在する場合、キーの値によって指定されたクラスをバンドルのプリンシパル クラスとして使用します。キーが存在しない場合、またはキーが存在しないクラスを指定している場合、NSBundle は最初にロードされたクラスをプリンシパル クラスとして使用します。バンドルが Xcode でビルドされている場合、プロジェクトで表示されるクラスの順序によって、ロードされる順序が決まります。

Source :

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingCode/Concepts/CocoaBundles.html#//apple_ref/doc/uid/20001269-BAJCIAHA

于 2013-03-04T08:53:37.240 に答える