2013-03-29 34 views
0

我一直工作在一个项目过早地释放了几个星期了,最近实施了单独的对象,以帮助保存数据。在实现之后,我一直在更新我的主视图控制器中的标签。的UILabel获取ARC

例如,我试图更新以下标签:

@property (nonatomic, retain) IBOutlet UILabel *numDrinksLabel; 
@property (nonatomic, retain) IBOutlet UILabel *BACLabel; 

用下面的代码,这是一个被调用上按下一个按钮函数内部:

BACLabel.text = [NSString stringWithFormat:@"%.2f", user.BAC]; 
numDrinksLabel.text = [NSString stringWithFormat:@"(%i)", user.numDrinks]; 

这代码块给我的运行时错误:

-[__NSCFString setText:]: unrecognized selector sent to instance 0x1197ef40 

但是,相同的代码块内部调用viewDidLoadviewDidAppear执行没有问题。最初,这个建议我,有我的@property声明一个问题,但我得到了同样的错误,当我改变retainstrong,当我改变weak,该的UILabel对象只是空,这是可以预料的,但仍然很令人沮丧的。

所以现在的问题是,为什么会成为viewDidAppear功能后dealloced标签的对象?

就如何解决这一问题或根本原因进一步测试任何建议,将不胜感激!

+0

IBOutlets通常应该声明为弱,因为它们包含的视图拥有一个强指针。这就是说,你的错误是说你发送setText字符串而不是标签。你确定这段代码是错误的地方吗? – rdelmar

回答

0

看来,当你分配的东西给UILabel对象的文本属性的对象包含实例变量numDrinksLabelBACLabel也不复存在。
由于这种情况,你按下一个按钮后,你一直在主事件循环之前。在这个循环中,如果任何autorelease对象没有被某个对象保留,它将被释放。
因此,在我看来,有你的UILabels作为高德是一个自动释放的对象,并且不保留,因为你不使用setter方法一样self.BACLabel.text =而只是分配方法为BACLabel.text =的对象。
所以试图通过制定者像self.BACLabel.text =更换喜欢BACLabel.text =你的任务,如sixthcent说。

0

请检查这些标签的上海华也宣布strong

+0

此外,尝试访问标签为self.BACLabel而不是BACLabel。 – sixthcent

+0

这就是问题所在,非常感谢您的帮助! – sdcoffey