在基於文檔可可應用程序中,我使用實例化從外部束幾個對象(插件):可可 - 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;
}
在每個那些,一個筆尖文件是在init上加載,它將根視圖與我的插件類中的屬性綁定。下面以一個最小的插件類的定義:
@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自然不能在我的Plugin類中設置頂級對象引用,我懷疑是因爲mainBundle與插件的捆綁無關。
我將如何去實現呢?有沒有辦法找到「當前」包可能(Plugin類來自的包,可以這麼說)?
謝謝。
感謝您的回答。我擴大了這個問題,使其更具體。 – insys
@ user2311023 - 查看已更新問題的更新答案。 – CRD
從舊方法的偉大洞察力!這很好,非常感謝。 – insys