Objective c loadNibNamed加载到不同的IBOutlet?

Objective c loadNibNamed加载到不同的IBOutlet?,objective-c,cocoa-touch,interface-builder,iboutlet,Objective C,Cocoa Touch,Interface Builder,Iboutlet,我有一个非常奇怪的问题,还没能解决它 此类定义如下: @interface EngineViewController : UIViewController { } @property (nonatomic,readonly) IBOutlet GameView* vGameView; @property (nonatomic,readonly) IBOutlet MainMenu* vMainMenu; @property (nonatomic,readonly) IBOutlet Countr

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

此类定义如下:

@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 outlet设置为UIView MainMenu类+未设置的其他outlet

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

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

为什么loadNibNamed会导致将第一个出口设置为0x1并偏移其他出口,从而将应位于当前出口的实例设置为下一个?你知道该试试什么吗


非常感谢

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

@property (nonatomic,retain) IBOutlet GameView* vGameView;
@property (nonatomic,retain) IBOutlet MainMenu* vMainMenu;
@property (nonatomic,retain) IBOutlet CountryOverlay* vCountryOverlay;

UIViewController的默认init方法可能在做一些不正常的事情。 你应该使用

- (id) init {
   self = [self initWithNibNamed:@"EngineViewController" ....];
   if (self) { ... }
   return self;
}

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


如果遇到这些情况,请先尝试使用NSLog:P

谢谢,我刚试过,还是一样。我也尝试过只使用类成员而不使用属性,但始终使用相同的属性。我猜UIKit中的某些东西在应用程序的那个部分被损坏了。我会在应用程序启动后立即尝试这样做……我想知道:为什么您使用loadNibNamed,而不让IB完全实例化您的视图控制器和所有相关对象?因为我需要动态加载一些视图,并在不再需要节省内存时卸载它们。它总是以这种方式运行,即使我在ApplicationdFinish启动中这样做!但在一个新的清洁项目上,它是有效的。天啊。。。