Instance Property インスタンスプロパティ

principalClass

The bundle’s principal class. バンドルの持つプリンシパル(主役)クラス。

Declaration 宣言

var principalClass: AnyClass? { get }

Discussion 議論

This property is set after ensuring that the code containing the definition of the class is dynamically loaded. If the bundle encounters errors in loading or if it can’t find the executable code file in the bundle directory, this property is nil. このプロパティは、クラスの定義を含んでいるコードが動的にロードされることを確実にした後に設定されます。バンドルがロードしている間にエラーに直面するならば、またはそれがバンドルディレクトリ中に実行可能コードファイルを見つけられないならば、このプロパティはnilを返します。

The principal class typically controls all the other classes in the bundle; it should mediate between those classes and classes external to the bundle. Classes (and categories) are loaded from just one file within the bundle directory. The bundle obtains the name of the code file to load from the dictionary returned from infoDictionary, using “NSExecutable” as the key. The bundle determines its principal class in one of two ways: プリンシパルクラスは、たいていバンドルの中の全てのその他のクラスを制御します;それは、それらクラスとそのバンドルに関係のないクラスの間を調停すべきです。さまざまなクラス(そしてカテゴリ)は、バンドルディレクトリ内部のただ1つのファイルからロードされます。バンドルは、そのコードファイルの名前を獲得して、infoDictionaryから、“NSExecutable” をキーとして使って返される辞書からロードを行います。バンドルは、それのプリンシパルクラスを以下の2つの方法のうち1つで決定します:

  • It first looks in its own information dictionary, which extracts the information encoded in the bundle’s property list (Info.plist). The bundle obtains the principal class from the dictionary using the key NSPrincipalClass. For non-loadable bundles (applications and frameworks), if the principal class is not specified in the property list, this property is nil. それはまず、それ自身の情報辞書をのぞきます、それはバンドルの持つプロパティリスト(Info.plist)の中にエンコードされる情報を抜き出します。バンドルは、キーNSPrincipalClassを使って辞書からプリンシパルクラスを獲得します。ロード不可能なバンドル(アプリケーションとフレームワーク)に対して、プリンシパルクラスがプロパティリストにおいて指定されないならば、このプロパティはnilを返します。

  • If the principal class is not specified in the information dictionary, the bundle identifies the first class loaded as the principal class. When several classes are linked into a dynamically loadable file, the default principal class is the first one listed on the ld command line. In the following example, Reporter would be the principal class: プリンシパルクラスが情報辞書において指定されないならば、バンドルは、ロードされる最初のクラスをプリンシパルクラスとして識別します。幾つかのクラスがひとつの動的なロード可能ファイルへとリンクされるならば、省略時のプリンシパルクラスはldコマンドライン上でリストされる最初のものです。以下の例において、Reporterはプリンシパルクラスになるでしょう:


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

The order of classes in Xcode’s project browser is the order in which they will be linked. To designate the principal class, control-drag the file containing its implementation to the top of the list. Xcodeのプロジェクトブラウザの中のクラスの順番は、それらがリンクされることになる順番です。プリンシパルクラスを指名するには、それの実装を含んでいるファイルを「Control-ドラッグ」して、リストの一番上にしてください。

As a side effect of code loading, the receiver posts didLoadNotification after all classes and categories have been loaded; see Notifications for details. コードをロードする副作用として、レシーバは全てのクラスとカテゴリがロードされた後にdidLoadNotificationを投函します;詳細としてNotificationsを見てください。

The following method obtains a bundle by specifying its path (bundleWithPath:), then loads the bundle with principalClass and uses the principal class object to allocate and initialize an instance of that class: 以下のメソッドは、あるバンドルをそれのパス(bundleWithPath:)を指定することによって取得します、それからそのバンドルをprincipalClassを使ってロードします、そしてプリンシパルクラスオブジェクトを使ってそのクラスのインスタンスをアロケートおよび初期化します:


- (void)loadBundle:(id)sender
{
    Class exampleClass;
    id newInstance;
    NSString *path = @"/tmp/Projects/BundleExample/BundleExample.bundle";
    NSBundle *bundleToLoad = [NSBundle bundleWithPath:path];
    if (exampleClass = bundleToLoad.principalClass) {
        newInstance = [[exampleClass alloc] init];
        [newInstance doSomething];
    }
}

See Also 参照

Getting Classes from a Bundle バンドルからクラスを取得する

Related Documentation 関連文書