Я пытаюсь создать Swift пользовательский текстовый редактор (облегченная версия) и застрял на ошибке iOS 8 fontDescriptorWithSymbolicTraits, возвращая нуль. Есть ли какие-либо быстрые методы обхода?Быстрая альтернатива для шрифтаDescriptorWithSymbolicTraits ios 8 ошибка
Я создал small project sample here, вы можете загрузить и запустить следующий сценарий:
- Выберите текст
- Нажмите на кнопку "B" кнопку
- Нажмите на "I" кнопка
Аварии приложений, fontDescriptorWithSymbolicTraits
возвращается nil
:(
private func addOrRemoveTraitWithName(traitName: String, traitValue: UInt32) {
let range = self.textEditor.selectedRange
let currentAttributesDict = self.textEditor.textStorage.attributesAtIndex(range.location, effectiveRange: nil)
let currentFont = currentAttributesDict[NSFontAttributeName]
let fontDescriptor = currentFont?.fontDescriptor()
let fontNameAttribute = fontDescriptor?.fontAttributes()[UIFontDescriptorNameAttribute]
var changedFontDescriptor: UIFontDescriptor?
if fontNameAttribute?.rangeOfString(traitName).location == NSNotFound {
let existingTraitsWithNewTrait = UIFontDescriptorSymbolicTraits(rawValue: fontDescriptor!.symbolicTraits.rawValue | traitValue)
changedFontDescriptor = fontDescriptor?.fontDescriptorWithSymbolicTraits(existingTraitsWithNewTrait)
} else {
let existingTraitsWithoutTrait = UIFontDescriptorSymbolicTraits(rawValue: fontDescriptor!.symbolicTraits.rawValue & ~traitValue)
changedFontDescriptor = fontDescriptor?.fontDescriptorWithSymbolicTraits(existingTraitsWithoutTrait)
}
let updatedFont = UIFont(descriptor: changedFontDescriptor!, size: 0.0)
var dict = [String : AnyObject]()
dict[NSFontAttributeName] = updatedFont
self.textEditor.textStorage.beginEditing()
self.textEditor.textStorage.setAttributes(dict, range: range)
self.textEditor.textStorage.endEditing()
}
Я настоятельно рекомендую взять быстрый взгляд на sample project
Какие варианты у меня есть?
Я также видел, что on Apple documentation the method который был использован другой отсутствует в SDK & ДОКУМЕНТАЦИЯ
То, что другие говорят об этом:
Извините, но я не уверен, где я должен поместить ваш код –
Нигде. Я не пишу ваш код для вас. Я просто показываю вам эквивалентный код Core Text для выполнения символических признаков без использования сломанного дескриптора шрифта. – matt
О, спасибо! Не беспокойтесь, я не хотел звучать так :) –