1

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

此类定义:

@interface EngineViewController : UIViewController
{
}
@property (nonatomic,readonly) IBOutlet GameView* vGameView;
@property (nonatomic,readonly) IBOutlet MainMenu* vMainMenu;
@property (nonatomic,readonly) IBOutlet CountryOverlay* vCountryOverlay;
@end

在 init 方法中,我有以下代码:

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 插座设置为 UIView(MainMenu 类)+ 未设置其他插座。

我不知道该尝试什么。我尝试创建一个空的 xib,将文件所有者设置为 EngineViewController 并再次设置该 vMainMenu 插座。我还尝试在开头添加一个新的“虚拟”插座属性。尝试从应用程序的不同部分调用 loadNibNamed,始终相同。

但是当我创建一个新的、干净的项目、新的笔尖、设置所有者、制作了一些插座并做同样的事情时,它工作得很好。

为什么 loadNibNamed 会导致第一个出口设置为 0x1 并“偏移”其他出口,将当前出口的实例设置为下一个出口?知道要尝试什么吗?

非常感谢!!

4

3 回答 3

0

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

- (id) init {
   self = [self initWithNibNamed:@"EngineViewController" ....];
   if (self) { ... }
   return self;
}
于 2012-06-04T16:24:28.237 回答
0

好的。问题出在(gdb)调试器中。它显示错误符号的错误数据。数据已正确加载到 IBOutlets,崩溃问题在其他地方。非常感谢您尝试帮助我。

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

于 2012-06-04T16:40:58.173 回答
0

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

@property (nonatomic,retain) IBOutlet GameView* vGameView;
@property (nonatomic,retain) IBOutlet MainMenu* vMainMenu;
@property (nonatomic,retain) IBOutlet CountryOverlay* vCountryOverlay;
于 2012-06-03T20:08:19.830 回答