为什么UILabel是0x0?

时间:2009-05-23 04:34:59

标签: iphone cocoa-touch memory-management uilabel

我正在加载一个笔尖:

ContentViewController *theController = [[ContentViewController alloc] initWithNibName:@"ContentView" bundle:nil];

上面有标签。视图控制器具有UILabel的IBOutlet,其具有保留和合成变量的@property。当我从另一个类加载上面的nib并将标签的text属性引用为:

theController.myLabel.text = @"testing...";

myLabel的地址为0x0。在分配之前,文本是“无效的”。赋值后,它的类型是ContentViewController。内存管理存在一些问题。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

在init调用中不会立即建立连接。在访问视图控制器的view属性之前,不会加载主视图,这会导致所有其他IBOutlet也被设置。如果您在加载视图之前尝试访问IBOutlet,则它将为零。通常,分配代码应该进入-viewDidLoad。如果您需要在将视图添加到屏幕之前执行某些操作,只需在将任何内容分配给任何IBOutlet之前访问视图:

theController.view;
theController.myLabel.text = @"testing...";

答案 1 :(得分:0)

ViewControllers仅按需加载其视图。分配中的隐式getMyLabel调用会导致加载视图并连接插座。至于类型错误,我不知道为什么myLabel会以ContentViewController的类型结束。您应该检查界面构建器中的连接,并确保它们已正确连接。

答案 2 :(得分:0)

你是否写了任何代码,

-(void)loadView {  }

方法

如果是这样,IBOutlet对象没有被分配 尝试评论此功能。
如果你需要这个函数被激活,请调用loadNibnamed:方法来调用viewController。