首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >loadNibNamed加载到不同的IBOutlets?

loadNibNamed加载到不同的IBOutlets?
EN

Stack Overflow用户
提问于 2012-06-04 03:02:55
回答 3查看 652关注 0票数 1

我有一个非常奇怪的问题,还没能解决。

此类的定义如下:

代码语言:javascript
复制
@interface EngineViewController : UIViewController
{
}
@property (nonatomic,readonly) IBOutlet GameView* vGameView;
@property (nonatomic,readonly) IBOutlet MainMenu* vMainMenu;
@property (nonatomic,readonly) IBOutlet CountryOverlay* vCountryOverlay;
@end

在init方法中,我有这样的代码:

代码语言:javascript
复制
if (![[NSBundle mainBundle] loadNibNamed:@"EngineViewController" owner:self options:nil])
{
    NSLog(@"Failed to load menu nib!");
    return NO;
}

// init
[self.view addSubview:vMainMenu];

问题是,vMainMenu是nil,vGameView是0x1,MainMenu类实例被分配给vCountryOverlay (而不是vMainMenu)。

是的,在Xib中,我将EngineViewController设置为文件所有者,并将vMainMenu outlet设置为UIView (MainMenu类)+未设置其他outlets。

我不知道该怎么尝试。我尝试创建一个空的xib,将文件所有者设置为EngineViewController,然后再次设置该vMainMenu出口。我还尝试在开头添加一个新的“虚拟”outlet属性。尝试从应用程序的不同部分调用loadNibNamed,总是相同的。

但是当我创建了一个新的,干净的项目,new nib,set owner,做了几个插座,做了同样的事情,它工作得很好。

为什么loadNibNamed会导致将第一个插座设置为0x1并“偏移”其他插座,将应该位于当前插座的实例设置为下一个插座?你知道该怎么做吗?

非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-05 00:40:58

好的。问题在(gdb)调试器中。它显示了错误符号的错误数据。数据已正确加载到IBOutlets,崩溃问题出在别处。非常感谢你试着帮助我。

在这些情况下,请先尝试使用NSLog。:P

票数 0
EN

Stack Overflow用户

发布于 2012-06-04 04:08:20

您是否介意为您的属性尝试以下声明:

代码语言:javascript
复制
@property (nonatomic,retain) IBOutlet GameView* vGameView;
@property (nonatomic,retain) IBOutlet MainMenu* vMainMenu;
@property (nonatomic,retain) IBOutlet CountryOverlay* vCountryOverlay;
票数 0
EN

Stack Overflow用户

发布于 2012-06-05 00:24:28

UIViewController的默认init方法可能会做一些奇怪的事情。你应该使用

代码语言:javascript
复制
- (id) init {
   self = [self initWithNibNamed:@"EngineViewController" ....];
   if (self) { ... }
   return self;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10873064

复制
相关文章

相似问题

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