Функция iPhone для создания UILabel дает сбой и вылетает - PullRequest
1 голос
/ 07 сентября 2010

У меня есть вид с прокруткой.Я использую код для добавления меток к просмотру прокрутки.Поскольку существует много избыточного кода, я попытался переместить создание метки в отдельную функцию, которая возвращает UILabel.Вот эта функция:

- (UILabel *)   f_MakeLabelWithL:(float)MyLeft T:(float)MyTop W:(float)MyWidth H:(float)MyHeight Align:(UITextAlignment)MyAlign 
                      Font:(UIFont *)MyFont TextColor:(UIColor *)MyTextColor BGColor:(UIColor *)MyBGColor {

CGRect rect = CGRectMake(MyLeft, MyTop, MyWidth, MyHeight);
UILabel *label = [[[UILabel alloc] initWithFrame:rect] autorelease];

label.adjustsFontSizeToFitWidth = YES;
label.backgroundColor = MyBGColor;
label.font = MyFont;
label.numberOfLines = 0;
label.textAlignment = MyAlign;
label.textColor = MyTextColor;

return label;
}

Я устанавливаю текст метки после его возврата.Или так я и собирался.На самом деле, метка с голубым фоном выглядит как сплошной черный прямоугольник.Один с ясным фоном совершенно ясен.Хуже того: представление прокрутки не будет прокручиваться, и попытка сделать это приводит к сбою приложения без каких-либо объяснений в консоли отладчика.

Тем не менее, весь этот код работает нормально и просто отлично.

Кто-нибудь знает почему?

Обновление: вставка кода в линию исправила отображение меток.Но я также использовал функцию для создания изображений:

- (UIImageView *) f_MakeImageWithL:(float)MyLeft T:(float)MyTop W:(float)MyWidth H:(float)MyHeight File:(NSString *)MyFile {
CGRect rect = CGRectMake(MyLeft, MyTop, MyWidth, MyHeight);
UIImageView *oImageView = [[[UIImageView alloc] initWithFrame:rect] autorelease];

NSString *s = [[Isystant f_DocumentsPath] stringByAppendingPathComponent:MyFile];
UIImage *oImage = [UIImage imageWithContentsOfFile:s];
[oImageView setImage:oImage];
oImageView.backgroundColor = [UIColor redColor];
oImageView.opaque = YES; // explicitly opaque for performance

return oImageView;
}

Это создавало изображения, но проблема замороженной прокрутки / сбоя не исчезла, пока я не вставил этот код обратно в строку.

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

Похоже, вы переиздали UILabel.Вам не нужно освобождать метку после добавления ее в ваше представление прокрутки, если она ранее нигде не сохранялась (и вы автоматически высвобождали ее в методе makeImageWithL).

Вероятно, поэтому она работает, когдаВы помещаете это в линию ... потому что в этом сценарии я бы поспорил, что вы удаляете авто-релиз, верно?

-S

1 голос
/ 07 сентября 2010

Сохраняете ли вы возвращенный ярлык где-нибудь?

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