用于创建UILabel的iPhone功能失败并崩溃

时间:2010-09-07 16:31:48

标签: iphone crash uilabel

我有一个带有scrollview的视图。我使用代码为scrollview添加标签。由于存在大量冗余代码,我尝试将标签创建移动到返回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;
}

我在标签返回后设置了文本。或者我打算。事实上,被告知具有蓝色背景的标签显示为纯黑色矩形。具有明确背景的人完全清楚。更糟糕的是:scrollview不会滚动,并试图让它这样做会在调试器控制台中没有任何解释的情况下崩溃应用程序。

然而,所有这些代码内联工作都很精致和花花公子。

任何人都知道为什么?

更新:将代码内联固定标签的显示。但我也在使用一个函数来创建图像:

- (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 个答案:

答案 0 :(得分:1)

您是否在某处保留了退回的标签?

答案 1 :(得分:1)

在我看来,你过度释放了UILabel。如果标签在之前的任何地方都没有保留(并且你已经在makeImageWithL方法中自动释放它),则不必在将标签添加到滚动视图后释放标签。

这可能就是为什么当你把它内联时它正在工作...因为在那种情况下,我打赌你要删除自动释放,对吗?

-S