NSBundle的主要类

sus*_*use 5 iphone nsbundle

Plz帮助我理解principalClass的用途是什么?它的语法是什么.我理解它是在NSBundle类中,但我们可以为任何捆绑创建它是否仅适用于可萝卜捆绑?plz帮我了解principalClass的概念.

感谢您.

Vas*_*lis 7

我将举例说明如何创建和加载包作为插件.希望这对你有很大的帮助.我必须说我同意其他2个(迄今为止)的答案.所以...

创建一个Xcode项目为"Bundle"(在Xcode 3.2.6中是在New Project-> Framework&Library-> select"Bundle").创建以下文件......

PClass.h

#import <Foundation/Foundation.h>
@interface PClass : NSObject {

}

- (NSString*) stringMessage;

@end
Run Code Online (Sandbox Code Playgroud)

PClass.m

- (NSString*) stringMessage {
    return @"Hallo from plugin";
}
Run Code Online (Sandbox Code Playgroud)

在项目.plist文件中添加以下两个条目:

"捆绑显示名称""MyPlugin"

"校长班""PClass"

然后编译项目并将二进制文件(.../build/Debug/yourPlugin.bundle)移动到您喜欢的文件夹中以保存您项目的插件(可以将其复制到一个项目.Plagins /中关心).

然后到已经Xcode项目添加以下内容:

- (void) loadPlugin {

    id bundle = [NSBundle bundleWithPath:@"the path you/placed/yourPlugin.bundle"];

    NSLog(@"%@", [[bundle infoDictionary] valueForKey:@"CFBundleDisplayName"]);
    // Here you can preview your plugins names without loading them if you don't need to or just to
    // display it to GUI, etc

    NSError *err;
    if(![bundle loadAndReturnError:&err]) {
        // err 
    } else {
        // bundle loaded
        Class PluginClass = [bundle principalClass]; // here is where you need your principal class!
        // OR...
        //Class someClass = [bundle classNamed:@"KillerAppController"];

        id instance = [[PluginClass alloc] init];

        NSLog(@"%@", [instance stringMessage]);

        [instance release];  // If required
    [bundle unload]; // If required
}
Run Code Online (Sandbox Code Playgroud)

}

您刚刚通过其Principal Class加载了一个bundle作为应用程序的插件.


bbu*_*bum 5

捆绑软件的“主要类”仅仅是被标记为捆绑软件的主要类的Objective-C类,因此将由捆绑软件实例的-principalClass方法返回。

仅此而已,没有魔力。

它仅适用于可装入包,因为仅可装入包定义了新的Objective-C类。