インスタンスプロパティ


principalClass


バンドルの主クラス。


iOS 2.0+ iPadOS 2.0+ Mac Catalyst 13.0+ macOS 10.0+

tvOS 9.0+ visionOS 1.0+ watchOS 2.0+

var principalClass: AnyClass? { get }




議論


このプロパティは、クラスの定義を含むコードが動的にロードされたことを確認した後に設定されます。バンドルがロード中にエラーに遭遇した場合、またはバンドルディレクトリで実行可能コードファイルが見つからない場合、このプロパティは nil になります。


主クラスは通常、バンドル内の他のすべてのクラスを制御します。主クラスは、それらのクラスとバンドル外部のクラスの間で仲介する必要があります。クラス (およびカテゴリ) は、バンドルディレクトリ内の 1 つのファイルからのみロードされます。バンドルは、キーとして "NSExecutable" を使用して、infoDictionary から返された辞書からロードするコードファイルの名前を取得します。バンドルは、以下の 2 つの方法のいずれかで主クラスを決定します。


  • まず、バンドルのプロパティリスト (Info.plist) にコード化された情報を抽出した独自の情報辞書を参照します。バンドルは、キー NSPrincipalClass を使用して辞書から主クラスを取得します。ロード不可能なバンドル (アプリケーションとフレームワーク) の場合、主クラスがプロパティリストに指定されていない場合、このプロパティは nil になります。

  • 主クラスが情報辞書に指定されていない場合、バンドルはロードされた最初のクラスを主クラスとして識別します。複数のクラスが動的にロード可能なファイルにリンクされている場合、デフォルトの主クラスは、ld コマンドラインにリストされている最初のクラスです。以下の例では、Reporter が主クラスになります。


    ld -o myBundle -r Reporter.o NotePad.o QueryList.o

    Xcode のプロジェクトブラウザでのクラスの順序は、リンクされる順序です。主クラスを指定するには、その実装を含むファイルを control キーを押しながらリストの先頭にドラッグします。


    コードのロードの副作用として、すべてのクラスとカテゴリがロードされた後、受信者は didLoadNotification をポストします。詳細については、Notifications を参照してください。


    以下のメソッドは、そのパス (bundleWithPath:) を指定してバンドルを取得し、principalClass を使用してバンドルをロードし、主クラス オブジェクトを使用してそのクラスのインスタンスを割り当てて初期化します。


    1. - (void)loadBundle:(id)sender
    2. {
    3. Class exampleClass;
    4. id newInstance;
    5. NSString *path = @"/tmp/Projects/BundleExample/BundleExample.bundle";
    6. NSBundle *bundleToLoad = [NSBundle bundleWithPath:path];
    7. if (exampleClass = bundleToLoad.principalClass) {
    8. newInstance = [[exampleClass alloc] init];
    9. [newInstance doSomething];
    10. }
    11. }




    以下も見よ


    バンドルからクラスを取得


    func classNamed(String) -> AnyClass?

    指定された名前の Class オブジェクトを返します。


    class let didLoadNotification: NSNotification.Name

    クラスが動的にロードされたことを監視者に知らせる通知。


    let NSLoadedClasses: String

    ロードされた各クラスの名前の配列に対応する didLoadNotification 通知の userInfo 辞書のキーとして使用される定数。



    関連した文書


    func load() -> Bool

    コードがまだロードされていない場合は、バンドルの実行可能コードを実行中のプログラムに動的にロードします。


    var infoDictionary: [String : Any]?

    バンドルの Info.plist ファイルから構築され、受信者に関する情報を含む辞書。














    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ