我有一个非常奇怪的问题,还没能解决。
此类的定义如下:
@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类)+未设置其他outlets。
我不知道该怎么尝试。我尝试创建一个空的xib,将文件所有者设置为EngineViewController,然后再次设置该vMainMenu出口。我还尝试在开头添加一个新的“虚拟”outlet属性。尝试从应用程序的不同部分调用loadNibNamed,总是相同的。
但是当我创建了一个新的,干净的项目,new nib,set owner,做了几个插座,做了同样的事情,它工作得很好。
为什么loadNibNamed会导致将第一个插座设置为0x1并“偏移”其他插座,将应该位于当前插座的实例设置为下一个插座?你知道该怎么做吗?
非常感谢!
发布于 2012-06-05 00:40:58
好的。问题在(gdb)调试器中。它显示了错误符号的错误数据。数据已正确加载到IBOutlets,崩溃问题出在别处。非常感谢你试着帮助我。
在这些情况下,请先尝试使用NSLog。:P
发布于 2012-06-04 04:08:20
您是否介意为您的属性尝试以下声明:
@property (nonatomic,retain) IBOutlet GameView* vGameView;
@property (nonatomic,retain) IBOutlet MainMenu* vMainMenu;
@property (nonatomic,retain) IBOutlet CountryOverlay* vCountryOverlay;发布于 2012-06-05 00:24:28
UIViewController的默认init方法可能会做一些奇怪的事情。你应该使用
- (id) init {
self = [self initWithNibNamed:@"EngineViewController" ....];
if (self) { ... }
return self;
}https://stackoverflow.com/questions/10873064
复制相似问题