我的iOS应用程序在iOS 8.2上崩溃,在iOS 9及更高版本上完美运行。
当我检查崩溃日志时,以下函数导致崩溃(写在NSMutableAttributedString
扩展名中)
func changeFont(font: UIFont, range : NSRange, keepFontSize: Bool = false)
{
let traits = font.fontDescriptor().symbolicTraits
let descriptor = baseDescriptor.fontDescriptorWithSymbolicTraits(traits)
let newFont = UIFont(descriptor: descriptor, size: keepFontSize ? descriptor.pointSize : baseDescriptor.pointSize)
self.removeAttribute(NSFontAttributeName, range: range)
self.addAttribute(NSFontAttributeName, value: newFont, range: range) // <- Crash happens here
}
崩溃日志
***由于未捕获的异常'NSInvalidArgumentException'而终止应用,原因: 'NSConcreteMutableAttributedString addAttribute:value:range :: nil 值'
当我调试并记录该函数中使用的变量时,descriptor
&amp; newFont
显示为<uninitialized>
(lldb) po traits
▿ UIFontDescriptorSymbolicTraits
- rawValue : 268435458
(lldb) po baseDescriptor
UICTFontDescriptor <0x7fc075b574c0> = {
NSFontNameAttribute = CenturyGothic;
NSFontSizeAttribute = 14;
}
(lldb) po descriptor
<uninitialized>
(lldb) po keepFontSize
true
(lldb) po newFont
<uninitialized>
我不能在这里使用if let
或newFont != nil
检查,因为两者都会抛出错误,说“ UIFont不会是”。
我该如何修复这次崩溃? (或者我如何检查对象是否已初始化?)我真的坚持这个问题,因为我的大多数用户仍然使用iOS 8。