IBOutlet为零的原因

时间:2011-06-03 05:50:41

标签: objective-c cocoa iboutlet

IBOutlet(已连接)可能是nil的原因是什么?

我在may应用程序中有一个始终为nil,即使我从头开始重新创建所有内容(声明和控制)。

6 个答案:

答案 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