, 내가 사용하여 외부 번들에서 여러 개체 (플러그인)을 인스턴스화하고로드 번들 : 소유자 : topLevelObjects 그 각각의 내코코아 - loadNibNamed : 문서 기반의 코코아 응용 프로그램에서
- (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에로드되며, 루트 뷰를 내 플러그인 클래스의 속성으로 바인딩합니다. 최소한의 플러그인 클래스 정의 아래 :
[[NSBundle mainBundle] loadNibNamed:@"NibName" owner:self topLevelObjects:nil];
:
@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+을 위해 사용되지 않는 있기 때문에)에 위의 호출을 대체하고, 그것을 대체 할
그러나이 경우 mainBundle을 사용하면 당연히 내 Plugin 클래스에서 최상위 수준의 객체 참조를 설정하지 못하고 mainBundle이 Plugin의 번들과 아무 관련이 없다고 생각됩니다.
어떻게 달성 할 수 있습니까? "현재"번들 (아마도 플러그인 클래스가 나온 번들)을 찾을 수있는 방법이 있습니까?
감사합니다.
답장을 보내 주셔서 감사합니다.나는 더 구체적으로 질문을 확장했다. – insys
@ user2311023 - 업데이트 된 질문에 대한 답변을 참조하십시오. – CRD
오래된 방법에서 큰 통찰력! 그것은 완벽하게 작동합니다. 많은 감사드립니다. – insys