NSmutablestring有2个换行符使程序崩溃

时间:2018-09-21 03:28:57

标签: ios swift nslayoutconstraint nsmutableattributedstring

我需要创建一个以换行符开头的Nsmutableattributed String,代码如下:

let dateString = TimeUtils.formatTimeOnly(from: data.date!)
let dateMutableString = NSMutableAttributedString.init(string: "\n\(dateString)")
let range = NSRange(location: 0, length: (dateString.count + 2))
dateMutableString.addAttributes([NSFontAttributeName: UIFont(name: "SourceSansPro-Regular", size: 11)!, NSForegroundColorAttributeName: UIColor.gray], range: range)

如果我只用一个\ n开头字符串,它将使程序在addattributes行上崩溃,但是如果我使用\ n \ n,它将不会中断程序。我能知道这里到底发生了什么吗?

1 个答案:

答案 0 :(得分:1)

如果只有一个多余的字符,则dateString.count + 2比字符串长,并且由于范围无效而导致崩溃。

为什么范围长度基于dateString.count + 2?为什么不构建所需的字符串,然后将该字符串传递给NSMutableAttributedString初始化程序?然后,您可以直接获取该字符串的长度。又为什么不将所需的属性传递给初始化程序,因为您还是希望将它们应用于整个字符串?

除此之外,在使用countNSString时,不能在Swift字符串上使用NSAttributedString来获取长度。您需要使用dateString.utf16.count。这是因为NSRangeNSString的{​​{1}}是基于16位字符的。

这里是创建属性字符串的一种简单方法,其中将属性应用于整个字符串:

NSAttributedString