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:]
,这是旧的包。
任何想法我做错了什么?
这是什么问题?什么不适合你? –
问题是我加载了新捆绑包,但它需要旧捆绑包中的主体类。我想卸载旧的捆绑包并开始使用新的捆绑包。 –
我刚从头创建了一个测试项目,看起来问题在我的代码中。我会深入研究,看看有什么不对。 –