Какао - loadNibNamed: владелец: topLevelObjects: из загруженного пакета
В основанном на документе приложении Какао я создаю несколько объектов (плагинов) из внешних пакетов, используя:
- (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;
}
Внутри каждого из них при инициализации загружается nib-файл, который связывает корневое представление со свойством в моем классе плагинов. Ниже приведено минимальное определение класса плагина:
@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
Хотя это работает нормально, я хочу заменить приведенный выше вызов NSBundle (потому что он не рекомендуется для OS X 10.8+) и заменить его следующим:
[[NSBundle mainBundle] loadNibNamed:@"NibName" owner:self topLevelObjects:nil];
Однако использование mainBundle в этом случае, естественно, не может установить ссылку на объект верхнего уровня в моем классе плагина, я подозреваю, что mainBundle не имеет ничего общего с комплектом плагина.
Как бы я пошел для достижения этого? Есть ли способ найти «текущий» пакет (возможно, пакет, из которого произошел класс Plugin)?
Благодарю.