无法编辑方法中的任何对象

时间:2011-08-12 11:06:15

标签: iphone ios

我有一个奇怪的问题。我有一个标签栏应用程序。当我想用任何方法设置UILabel的文本时,什么也没发生。

例如,当我调用此方法时,'label1'没有任何反应:

-(void)setOne:(NSMutableArray *)theArray {
label1 = [[UILabel alloc] init];
label1.text = @"Test";
}

有没有人能解决这个问题?

谢谢,

耶勒

3 个答案:

答案 0 :(得分:2)

当您调用此方法时,会创建一个新标签,并且之前与此ivar关联的标签的连接将丢失。这也可能是内存泄漏。

编辑:

根据代码的其余部分,这可能有效:

-(void)setOne:(NSMutableArray *)theArray {
    label1.text = @"Test";
}

答案 1 :(得分:1)

您没有看到任何事情,因为您创建了标签的新实例,并且不将其添加到任何位置。如果你真的想在你的视图中添加新标签,那么用适当的框架创建它并实际将它添加到某个视图中,例如。

-(void)setOne:(NSMutableArray *)theArray {
   label1 = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 200.0f, 30.0f)];
   label1.text = @"Test";
   [self.view addSubview: label1];
   // And do not forget to release your label!
   [label1 release];
}

如果要更改已存在的标签文本,请不要在方法中创建新实例,只需为其设置新文本:

-(void)setOne:(NSMutableArray *)theArray {
   // if label1 already exists we don't need to create a new one
   label1.text = @"Test";    
}

修改(来自评论中的更多信息)

创建视图控制器时,它可能不会立即加载其视图,因此在您的代码中

FirstViewController *FVC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[FVC setOne:[resultaten objectAtIndex:indexPath.row]];

当你调用setOne方法时,fvc的视图可能仍然没有被加载,并且该方法中的label1仍然是nil。您可以解决强制控制器的视图加载,以下应该工作:

 FirstViewController *FVC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
 FVC.view;
 [FVC setOne:[resultaten objectAtIndex:indexPath.row]];

但总的来说,我建议将您的值存储在某个独立于UI(即模型)的类中,或者至少存储在控制器的单独变量中,并仅在实际加载或显示在屏幕上时将其设置为UI元素(在viewDidLoad或viewWillAppear方法中)

答案 2 :(得分:0)

 - (void)viewDidLoad
{
     [super viewDidLoad];
     UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 22)];
     lbl.text =@"Hello";
     [self.view addSubview:lbl];

}