IBOutlet
(已连接)可能是什么原因nil
?
我有一个永远是的应用程序nil
,即使我从头开始重新创建所有内容(声明和控制)。
可能是你的笔尖搞砸了,但我发现一个常见的原因是有两个实例,你认为你只有一个,而你在代码中使用的那个不是你连接的那个。
如果您还定义了loadView
创建视图的方法,则可能取决于您如何初始化它。如果您使用它初始化它alloc-init
并且 nib 名称与类名称不同,那么您可能会遇到插座为 nil 的情况。但 Chuck 的回答似乎更合理。
我刚刚被刺痛的一个原因:如果 nib 文件由于某种原因未包含在目标资源文件中(就像您在将其添加到项目时未选中目标一样),Xcode 不会抛出错误,但所有出口从那个笔尖开始将是空的......
你在使用 UINavigationController 吗?
如果是这样,请在 IB 中打开 MainWindow.xib 并确保在 Attributes Inspector 中正确设置了根控制器的 nib 名称。
为什么不能正确设置?一个原因是“重命名”重构不会更新这一点,然后内部将找不到用于连接 UI 的 nib。或者您自己重命名了笔尖,并且没有更新此字段。
一种可能性:假设 IBOutlet 容器是一个单例对象,其功能如下:
+ (singletonObject*) sharedInstance {
if(!gGlobalSingletonPointer) {
gGlobalSingletonPointer = [[singletonObject alloc] init];
}
return gGlobalSingletonPointer;
}
如果单例对象尚不存在,则“按需”创建它。您在该函数中创建它时保存一个指向它的全局指针。
如果您还在 InterfaceBuilder 中实例化这样的对象,并连接其出口,则将创建该对象,而不会调用 sharedInstance。如果您随后调用 sharedInstance,则会创建一个新对象(没有 IBOutlet 连接)。
解决方法是更新 singletonObject 的 init 或 awakeFromNib 函数中的全局指针。
您是否对 File's Owner 做了一些不寻常的事情?如果您不是处于自动加载 nib 的情况之一(由应用程序加载的主 nib 或由视图控制器、文档或窗口控制器加载的 nib),那么您必须以编程方式加载 nib。