Kakao - loadNibNamed: owner: topLevelObjects: z załadowanego pakietu
W aplikacji Cocoa opartej na dokumencie tworzę kilka obiektów (wtyczek) z zewnętrznych pakietów, używając:
- (NSMutableArray *)getPluginsOfType:(Class)type;
{
NSBundle *main = [NSBundle mainBundle];
NSArray *allPlugins = [main pathsForResourcesOfType:@"bundle" inDirectory:@"../PlugIns"];
NSMutableArray *availablePlugins = [NSMutableArray array];
for (NSString *path in allPlugins)
{
NSBundle *pluginBundle = [NSBundle bundleWithPath:path];
[pluginBundle load];
Class principalClass = [pluginBundle principalClass];
[availablePlugins addObject:principalClass];
}
return availablePlugins;
}
W ramach każdego z nich ładowany jest plik nib podczas inicjowania, który wiąże widok główny z właściwością w mojej klasie wtyczek. Poniżej minimalnej definicji klasy wtyczki:
@interface Plugin
@property (strong) IBOutlet NSView *thePluginView;
@end
@implementation Plugin
- (instancetype)init
{
self = [super init];
if (self)
{
[NSBundle loadNibNamed:@"NibName" owner:self];
}
return self;
}
@end
Chociaż działa to dobrze, chcę zastąpić powyższe wywołanie NSBundle (ponieważ jest przestarzałe dla OS X 10.8+) i zastąpić je:
[[NSBundle mainBundle] loadNibNamed:@"NibName" owner:self topLevelObjects:nil];
Jednak użycie mainBundle w tym przypadku naturalnie nie powoduje ustawienia odniesienia do obiektów najwyższego poziomu w mojej klasie wtyczek. Podejrzewam, że mainBundle nie ma nic wspólnego z pakietem wtyczki.
Jak mógłbym to osiągnąć? Czy istnieje sposób na znalezienie „aktualnego” pakietu (być może pakietu, z którego pochodzi klasa wtyczek)?
Dzięki.