【问题标题】:Assertion failure in -[UILabel setFont:]-[UILabel setFont:] 中的断言失败
【发布时间】:2011-09-28 10:41:22
【问题描述】:

我在 iOS 3.1.2 中设置 UILabel 字体时遇到此异常,但在 iOS 4 中运行良好,

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: font != nil'

代码行是,

Outbound_Label.font = [UIFont fontWithName:@"DS-Digital" size:24];

DS-Digital 是我的自定义字体。

【问题讨论】:

  • 也许你应该检查返回值,似乎它没有找到你的字体。更好地检查资源文件是否正确包含。

标签: iphone uilabel nsexception


【解决方案1】:

[UIFont fontWithName:@"DS-Digital" size:24] 返回零。因为“DS-Digital”(Apple supported font list)没有可用的字体。所以它给了崩溃。

【讨论】:

  • 我在资源中添加了具有此名称的自定义字体。
【解决方案2】:

我的猜测是你的自定义字体没有被实例化。

每当我遇到这样的问题时,会发生两件事:获取字体和设置字体,我将它们分开以查找问题:

UIFont *font = [UIFont fontWithName:@"DS-Digital" size:24];
Outbound_Label.font = font;

然后我可以使用调试器或NSLog() 轻松确定错误的位置。

事实上,首先这是编写代码的一种非常清晰的方式。我从不担心优化,我只担心清晰度和易于维护。稍后,如果我分析了性能问题,找到真正的罪魁祸首并解决它们。代码越清晰越容易。

在这种情况下,编译器无疑会优化掉字体变量,因此不会造成伤害。

看到这个:SO answer
想要使用自定义字体的应用程序现在可以在其应用程序包中包含这些字体,并通过在其 Info.plist 文件中包含 UIAppFonts 键向系统注册这些字体。该键的值是一个字符串数组,用于标识应用程序包中的字体文件。当系统看到该键时,它会加载指定的字体并使它们可供应用程序使用。

【讨论】:

  • 我已经尝试使用上述方法,但它在第二行崩溃。
  • 第一行是nil还是字体实例?如果做的很好,Outbound_Label 有效吗?顺便说一句,Outbound_Label 是什么?编码实践是让变量以小写字母开头驼峰式,类以大写字母开头。这使得理解代码更容易,而 ARC 需要这种约定。
  • font 在第一行代码中为 nil,Outbound_Label 也是一个 UIalbel。你能告诉我这个 nil 值的可能原因是什么,因为我已经在资源中添加了 DS-DIGI.ttf。
【解决方案3】:

请试试这个,对我来说效果很好。

https://github.com/zynga/FontLabel

我已经从http://www.fontriver.com/font/ds-digital/ 下载了 DS-Digital 字体 并使用此字体运行上述应用程序,它适用于 IOS 3.1.2。

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 2017-08-07
    • 2012-08-01
    • 2015-09-01
    • 2012-09-26
    相关资源
    最近更新 更多