我正在加载一个笔尖:
ContentViewController *theController = [[ContentViewController alloc] initWithNibName:@"ContentView" bundle:nil];
上面有标签。视图控制器具有UILabel的IBOutlet,其具有保留和合成变量的@property。当我从另一个类加载上面的nib并将标签的text属性引用为:
theController.myLabel.text = @"testing...";
myLabel的地址为0x0。在分配之前,文本是“无效的”。赋值后,它的类型是ContentViewController。内存管理存在一些问题。有什么想法吗?
答案 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。