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