分配自定义字体时出现异常

Posted

技术标签:

【中文标题】分配自定义字体时出现异常【英文标题】:Exception while Assign Custom font 【发布时间】:2017-06-14 05:37:44 【问题描述】:

我正在尝试在我的应用程序中添加自定义字体GothamPro-NarrowMedium 我在我的项目中添加了.otf 文件,并在info.plist 中添加了应用程序提供的字体并添加到目标成员中。现在,当我通过接口分配字体时,当我尝试将其添加到 NSMutableAttributedString 时,它可以完美运行,我得到以下异常

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'* -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: 尝试插入 nil 对象 对象[0]' * 第一次抛出调用栈:(0x181ad6fe0 0x180538538 0x1819bd9b4 0x1819bd824 0x100075dac 0x100073fa8 0x187c07ec0 0x187c07a9c 0x187f975f0 0x187f5bce0 0x187f58130 0x187e94950 0x187e869ec 0x187bfa648 0x181a849a8 0x181a82630 0x181a82a7c 0x1819b2da4 0x18341c074 0x187c6d058 0x10011ff44 0x1809c159c) libc++abi.dylib: 以 NSException 类型的未捕获异常终止

我的代码是

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.alignment = _lbl_mylabel.textAlignment;

    NSDictionary *attribs = @
                              NSForegroundColorAttributeName: self.lbl_ticketdetail.textColor,
                              NSFontAttributeName: self.lbl_ticketdetail.font
                              ;
    NSMutableAttributedString *attributedText =
    [[NSMutableAttributedString alloc] initWithString:text
                                           attributes:attribs];
paragraphStyle.lineSpacing = 3;

        [attributedText setAttributes:@NSFontAttributeName:[UIFont fontWithName:@"GothamPro-NarrowMedium" size:20.0],NSParagraphStyleAttributeName:paragraphStyle
                                range:cmp];

        NSRange plce = [text rangeOfString:place];
        [attributedText setAttributes:@NSFontAttributeName:[UIFont fontWithName:@"GothamPro-NarrowMedium" size:16.0],NSParagraphStyleAttributeName:paragraphStyle
                                range:plce];

        NSMutableParagraphStyle *paragraphStyle1 = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle1.lineSpacing = 1;
        NSRange tkt_num_range = [text rangeOfString:STR_tkt_num_club];
        [attributedText setAttributes:@NSFontAttributeName:[UIFont fontWithName:@"GothamMedium" size:13.0],NSParagraphStyleAttributeName:paragraphStyle1 range:tkt_num_range];
self.mylabel.attributedText = attributedText;

【问题讨论】:

您正试图将 nil 放入字典中(这是不允许的)。由于您正在使用字符串文字构建字典,因此这些文字不能为零。 我认为self.lbl_ticketdetail.textColorself.lbl_ticketdetail.font 将是NIL。请检查数值。属性字典不应该接受NIL @Anbu.Karthik 正如我所提到的 .Plist 中正确添加了字体 @LalKrishna 如果我使用其他字体名称,它可以工作,所以我认为这不是问题 抱歉,您的回复不清楚。 【参考方案1】:

由于尝试将null 对象插入Dictionary 而发生崩溃。

我认为您在向项目中添加自定义字体时遇到问题。

请重新检查

    在您的应用程序中添加.TTF 字体。 将键 Fonts provided by application 添加到新行并 添加每个.TTF 文件名。

经过这些步骤,我猜你的info.plist 可能是这样的:

<key>UIAppFonts</key>
<array>
    <string>GothamMedium</string>
    <string>GothamPro-NarrowMedium</string>
</array>

要查找字体 PostScript 名称:

打开字体书 选择字体 查看 -> 显示字体信息 ( + I) 复制 PostScript 名称

【讨论】:

以上是关于分配自定义字体时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

尝试实现自定义字体时出现“@font-face 声明不遵循 fontspring 防弹语法”错误

如何在 TCPDF 中实现自定义字体

winform,自定义文本框控件 实现文本框验证加水印功能

处理自定义图像视图时出现 Classcast 异常

自定义授权过滤器在运行时出现异常

使用 Hbase 自定义过滤器时出现异常