UILabel的奇怪问题

时间:2011-08-08 17:52:48

标签: ios uilabel

我在我的UITableView中使用UILabel作为自定义单元格。下面是我正在使用的所有代码:

头文件:

UILabel *timeLabels;
@property (nonatomic, retain) UILabel *timeLabels;

代码文件:

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier

    timeLabels=[[UILabel alloc] init];
    timeLabels.textAlignment=UITextAlignmentLeft;
    timeLabels.font=[UIFont boldSystemFontOfSize:12];
    timeLabels.backgroundColor=[UIColor clearColor];
    timeLabels.textColor=[UIColor blueColor];

- (void) layoutSubviews

   frame=CGRectMake(boundsX+5, 5, 60, 45);
   timeLabels.frame=frame;

[timeLabels release]

我在timeLabels.frame=frame;

上收到以下错误
2011-08-08 12:44:07.290 EncameoApp[2014:707] -[NSCFString setFrame:]: unrecognized selector sent to instance 0x136890
2011-08-08 12:44:07.361 EncameoApp[2014:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString setFrame:]: unrecognized selector sent to instance 0x136890'

鉴于timeLabels不是NSString,而是UILabel,这很奇怪!

任何人都可以让我知道我错过了什么吗?感谢。

2 个答案:

答案 0 :(得分:5)

我也遇到过这种问题,但是我通过设置timeLabels的值解决了这个问题: -

timeLabels.text = @"value";

而不是

timeLabels = @"value";

答案 1 :(得分:1)

你显示的代码片段是正确的,无论如何我的猜测是你很可能有一个内存问题,使你的UILabel实例在执行layoutSubviews之前的某个时刻被释放,然后是那个内存被NSString重用,所以你在那里得到错误。

根据我的经验,最常见的情况是,错误地用错误的值覆盖timeLabels会产生相同的结果。这可以在类中或从另一个类(可能尝试设置标签值)中完成。

如果您想进行简单测试,请添加

 NSLog(@"timeLabels address %x", timeLabels);

同时initlayoutSubviews比较这两个值并看到它们不同(或者它们没有,在这种情况下你会遇到内存损坏问题)。

您应该检查您的代码,如果您需要更多帮助,请发布更多代码。