当我以编程方式在我的自定义initWithNibName方法中分配UILabel时,稍后在viewDidLoad中尝试为其分配字符串时,标签未指向任何内容。我没有释放它;标签显示在屏幕上。如果我在IB中创建标签,并在viewDidLoad中为其指定文本,则可以正常工作。
在viewDidLoad中设置手动分配的对象是否违反规则? 为什么它没有指向任何东西,即使在我的init之后调用了viewDidLoad?
来自viewDidLoad的文档:
在视图控制器将其关联的视图加载到内存后调用此方法。无论视图是存储在nib文件中还是以编程方式在loadView方法中创建,都会调用此方法。此方法最常用于对从nib文件加载的视图执行其他初始化步骤。
在我的初学者:
_descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 218, 280, 10)];
_descriptionLabel.numberOfLines = 0;
_descriptionLabel.lineBreakMode = UILineBreakModeWordWrap;
_descriptionLabel.font = [UIFont systemFontOfSize:12.0];
_descriptionLabel.adjustsFontSizeToFitWidth = NO;
_descriptionLabel.text = @"Description not found.";
_descriptionLabel.backgroundColor = [UIColor clearColor];
在viewDidLoad中,变量的值为0x0。 我手动分配的UIButton也是如此,一旦视图加载就完全正常工作。
答案 0 :(得分:1)
如果你想以编程方式创建UILabel,你可以在viewDidLoad(而不是initWithNibName)中进行。
不要害怕在viewDidLoad中进行UI设置。它提供了在视图出现在屏幕上之前添加任何静态UI元素。
直到调用viewDidAppear:(BOOL)动画之前,视图才会出现。
如果你有动态内容,请在viewWillAppear:(BOOL)动画中配置它。 (这看起来像你的情况)
然后确保将其添加到视图中:
[self.view addSubview:myLabel];
如果您将来需要访问新标签,则需要创建一个ivar来保存指向它的指针。
答案 1 :(得分:0)
在发布的代码中,_descriptionLabel UILabel不会被保留,并且会在绘制视图之前释放。
尝试
_descriptionLabel = [[[UILabel alloc] initWithFrame:CGRectMake(20, 218, 280, 10)] retain];
确保将[_descriptionLabel release]放在dealloc中。这假定_descriptionLabel是一个实例变量。
这基本上适用于您使用alloc,copy或new创建的任何对象。