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:]
,這是舊的包。
任何想法我做錯了什麼?
這是什麼問題?什麼不適合你? –
問題是我加載了新捆綁包,但它需要舊捆綁包中的主體類。我想卸載舊的捆綁包並開始使用新的捆綁包。 –
我剛從頭創建了一個測試項目,看起來問題在我的代碼中。我會深入研究,看看有什麼不對。 –