我正在寻找一个项目,将上传包括NSViewController的自定义NSBundles。在我的主程序中,我有这个代码来处理加载后的捆绑包…
id principalClass = [loadedBundle principalClass];
id instance = [[principalClass alloc] init];
[localLabel setStringValue:[instance name]];
NSView *incomingView = [[instance viewController] view];
[localView addSubview:incomingView];
[localView display];包中的主要类init方法看起来像这样...
-(id) init {
if(self = [super init]){
name = @"My Plugin";
viewController = [[ViewController alloc] initWithNibName:@"View" bundle:nil];
}
return self;
}View.nib是位于bundles项目中的nib。但是每当我加载这个包的时候,我就会得到这个错误...
2010-05-27 09:11:18.423 PluginLoader45032:a0f找不到名为: View in bundle path:(null) 2010-05-27 09:11:18.424 PluginLoader45032:a0f -NSViewController loadView无法加载"View“nib。
我知道我已经把所有东西都连接起来了,因为[label setStringValue:[instance name]];这行代码正确地设置了标签文本。另外,如果我把捆绑包中的所有类都加载到我的主应用程序项目中,一切都会像预期的那样工作。关于如何正确引用捆绑包中的"View“,有什么想法吗?
谢谢!
发布于 2010-05-27 22:40:09
在捆绑包方法中,不应该将nil传递给init参数。根据UIViewController文档,传递nil将在主包(应用程序的包)中查找NIB文件,这并不是您想要的。
您可以通过使用专门的初始化器来解决问题,如下所示:
- (id) initWithBundle:(NSBundle *)bundle {
if(self = [super init]){
name = @"My Plugin";
viewController = [[ViewController alloc] initWithNibName:@"View" bundle:bundle];
}
return self;
}并按如下方式使用它:
Class principalClass = [loadedBundle principalClass];
id instance = [[principalClass alloc] initWithBundle:loadedBundle];发布于 2010-05-27 22:37:19
"View.xib是个小人“?它要么是xib,要么是笔尖。xib不是笔尖。xib文件只能在接口生成器中使用,在部署应用程序中,它们必须转换为nib文件。这就是ibtool正在做的事情。Xcode不是简单地复制您的xib文件,它通过ibtool运行它们,ibtool会将它们转换为nib文件,然后将这些文件放入Resources文件夹。
https://stackoverflow.com/questions/2921969
复制相似问题