【问题标题】:loadNibNamed loads to different IBOutlets?loadNibNamed 加载到不同的 IBOutlets?
【发布时间】:2012-06-03 19:02:54
【问题描述】:

我遇到了一个很奇怪的问题,一直没能解决。

定义了这个类:

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

在初始化方法中我有这个代码:

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,始终相同。

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

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

非常感谢!!

【问题讨论】:

    标签: objective-c cocoa-touch interface-builder iboutlet


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,刚刚试过 - 一样。我也尝试过仅使用类成员(无属性),但始终相同。我猜 UIKit 中的某些东西在应用程序的那部分被损坏了。应用程序启动后我会尝试做同样的事情......
    • 我想知道:你为什么使用 loadNibNamed 而不让 IB 完全实例化你的视图控制器和所有相关对象?
    • 因为我需要动态加载一些视图并在不再需要时卸载它们(以节省内存)。它总是以这种方式运行,即使我在 applicationDidFinish 启动时这样做!但是在一个新的干净项目上,它可以工作。天哪……
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-06
        • 2017-01-08
        • 2017-03-27
        相关资源
        最近更新 更多