iOS 4.3中的UIFont exc_bad_access错误

时间:2011-12-22 01:37:40

标签: objective-c ios uilabel exc-bad-access ios4

我使用fontWithSize:方法设置标签的font属性,虽然它在iOS 5,iOS 4.3中工作正常但我收到了exc_bad_access错误。这是我的代码:

UILabel *headerText = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width - 10, 42)];

headerText.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:section];


headerText.font = [[UIFont alloc] fontWithSize:8];

同样,此代码在iOS 5中完美运行,但崩溃为4.3中的最后一行。我查看了Apple API文档和fontWithSize:以及UILabel的字体属性,自iOS 2开始以来一直存在。这里还有什么问题吗?

3 个答案:

答案 0 :(得分:2)

您正尝试在从未初始化的对象上调用方法。具体来说,你的行

[[UIFont alloc] fontWithSize:8]

alloc一个新的字体对象,但从未初始化它。随后对-fontWithSize:的调用崩溃,因为它假定对象已初始化。

你想要创建什么字体?由于您跳过了初始化程序,因此您从未提供过字体系列。当然,UIFont甚至没有公开一个好的初始化器(你可以调用-init但是没有办法提供字体系列)。这表明你应该使用“方便”类来构造你的字体,例如: +[UIFont fontWithName:size]+[UIFont systemFontOfSize:]。在你的情况下,我假设你想要后者,所以你应该使用

[UIFont systemFontOfSize:8]

答案 1 :(得分:1)

如果您使用alloc to initial,则该方法通常以init开头。

fontWithSize :不习惯初始化。

  

返回与接收器相同但具有指定大小的字体对象。

这意味着您应该使用现有的字体实例来调用它。 例如:


    UIFont *font = [UIFont systemFontOfSize:12];
    UIFont *newFont = [font fontWithSize:24];

但是如果你想初始化一个实例,你需要调用以init开头的类方法或实例方法。

答案 2 :(得分:0)

fontWithSize是一个类方法而不是实例方法

基本上你没有分配UIFont对象,你只需要调用[UIFont fontWithSize:8]