1
내 응용 프로그램을위한 플러그 가능 인터페이스를 구축 중입니다. 나는 플러그인을위한 업데이트 메커니즘을 고수했다.NSBundle로드 및 언로드
나를 혼란스럽게하는 코드는 다음과 같습니다.
- (void) unloadBundle{
[_pluginInstance release], _pluginInstance = nil;
[[self bundle] unload];
[_bundle release], _bundle = nil;
}
- (void) loadBundleWithURL:(NSURL *)bundleURL{
NSBundle *newBundle = [NSBundle bundleWithURL:bundleURL];
if (newBundle){
[self setBundle:newBundle];
[self setPluginInstance:[[[[self.bundle principalClass] alloc] init] autorelease]];
NSLog(@"New bundle: %@", self.bundle);
NSLog(@"New bundle's principal class %@", [self.bundle principalClass]);
NSLog(@"Principal class' bundle is %@", [NSBundle bundleForClass:[self.bundle principalClass]]);
NSLog(@"Plugin's class %@", [self.pluginInstance class]);
}
}
이
플러그인 주요 클래스 주위에 내 래퍼의 방법이 있습니다. 방금unloadBundle
을 호출 한 다음
loadBundleWithURL
번들의 새 버전에 대한 URL을 지정합니다.
이
New bundle: NSBundle </Users/prudnikov/Work/Projects/***/Name.pluginextension> (loaded)
New bundle's principal class MyPluginClass
Principal class' bundle is NSBundle </Users/prudnikov/Library/Application Support/MyApp/PlugIns/Name.pluginextension> (not yet loaded)
Plugin's class MyPluginClass
나는 새로운 번들에서 주요 수업을 수단, [NSBundle bundleForClass:]
과의 번들을 얻을 수 있으며 기존 번들입니다 : 실행 때 콘솔에 다음과 같이 기록합니다.
내가 잘못하고있는 아이디어가 있습니까?
무엇이 문제입니까? 너를 위해 일하지 않는게 뭐야? –
문제는 새 번들을로드하지만 이전 번들에서 프린시 펄 클래스를 사용한다는 것입니다. 이전 번들을 언로드하고 새 번들을 사용하려고합니다. –
방금 처음부터 테스트 프로젝트를 만들었고 코드에서 문제가있는 것 같습니다. 나는 그것을 파고 무엇이 잘못되었는지 보게 될 것이다. –