首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加载NSViewController的NSBundle

加载NSViewController的NSBundle
EN

Stack Overflow用户
提问于 2010-05-27 22:22:46
回答 2查看 3.1K关注 0票数 3

我正在寻找一个项目,将上传包括NSViewController的自定义NSBundles。在我的主程序中,我有这个代码来处理加载后的捆绑包…

代码语言:javascript
复制
id principalClass = [loadedBundle principalClass];
id instance = [[principalClass alloc] init];
[localLabel setStringValue:[instance name]];
NSView *incomingView = [[instance viewController] view];
[localView addSubview:incomingView];
[localView display];

包中的主要类init方法看起来像这样...

代码语言:javascript
复制
-(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“,有什么想法吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-27 22:40:09

在捆绑包方法中,不应该将nil传递给init参数。根据UIViewController文档,传递nil将在主包(应用程序的包)中查找NIB文件,这并不是您想要的。

您可以通过使用专门的初始化器来解决问题,如下所示:

代码语言:javascript
复制
- (id) initWithBundle:(NSBundle *)bundle {
    if(self = [super init]){
        name = @"My Plugin";
        viewController = [[ViewController alloc] initWithNibName:@"View" bundle:bundle];
    }
    return self;
}

并按如下方式使用它:

代码语言:javascript
复制
Class principalClass = [loadedBundle principalClass];
id instance = [[principalClass alloc] initWithBundle:loadedBundle];
票数 2
EN

Stack Overflow用户

发布于 2010-05-27 22:37:19

"View.xib是个小人“?它要么是xib,要么是笔尖。xib不是笔尖。xib文件只能在接口生成器中使用,在部署应用程序中,它们必须转换为nib文件。这就是ibtool正在做的事情。Xcode不是简单地复制您的xib文件,它通过ibtool运行它们,ibtool会将它们转换为nib文件,然后将这些文件放入Resources文件夹。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2921969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档