странная проблема с UILabel - PullRequest
       6

странная проблема с UILabel

0 голосов
/ 08 августа 2011

Я использую UILabel для пользовательских ячеек в моем UITableView. Вот весь код, который я использую:

Заголовочный файл:

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 ]

5 голосов
/ 11 ноября 2011

Я также столкнулся с такой проблемой, но я решил эту проблему, установив значение timeLabels следующим образом: -

timeLabels.text = @"value";

вместо

timeLabels = @"value";
1 голос
/ 08 августа 2011

Фрагмент кода, который вы показываете, верен, в любом случае, я предполагаю, что у вас, вероятно, есть проблема с памятью, из-за которой ваш экземпляр UILabel может быть освобожден в какой-то момент до выполнения layoutSubviews, тогда эта память используется повторно NSString, так что вы получите ошибку там.

По моему опыту, наиболее распространенным случаем для этого в любом случае является ошибочная перезапись timeLabels с неправильным значением, которая может привести к тому же результату. Это может быть сделано внутри класса или из другого класса (который, возможно, пытается установить значение метки).

Если вы хотите сделать простой тест, добавьте

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

и init, и layoutSubviews, чтобы сравнить два значения и увидеть, что они различаются (или, может быть, нет, в этом случае у вас возникнет проблема с повреждением памяти).

Вы должны проверить свой код и опубликовать больше, если вам нужна дополнительная помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...