Поскольку сбой не может быть легко воспроизведен, он должен зависеть от содержимого myAttributedString
или nsrange
: окружающий код предоставляет значения, которые проходят ваши проверки, но все равно дают сбой. Я знаю, как этого добиться двумя способами.
Первый - передать NSRange
с местоположением NSNotFound
и length > 0
. Пример:
let myAttributedString = NSMutableAttributedString(string: "Hello")
let nsrange = NSRange(location: NSNotFound, length: 1)
Второй - сбой в старых версиях iOS при добавлении атрибутов в подмножество смайликов. Если вы видите сбой только в старых версиях iOS, это должен быть такой сценарий:
let myAttributedString = NSMutableAttributedString(string: "??? is a family")
let nsrange = NSRange(location: 1, length: 2)
Так что, если вы видите сбой для всех версий iOS, вы можете сначала проверить nsrange != NSNotFound
, чтобы исправить сбой. Если вы видите сбой только для более старых версий iOS, проверьте окружающий код на наличие мест, где вы могли бы рассчитать неправильный диапазон. Обычно это происходит при смешивании строковой информации из Swift со строковой информацией из Objective-C's Foundation. Например, "???".count
равно 1, тогда как ("???" as NSString).length
равно 8.