Вам следует обратить внимание на преобразование ваших дат в стандартную метку времени Unix. Это очень легко в любой среде, в которой вы работаете (Mysql, php, javascript). Например, в javascript Date.now()
возвращается текущее время как метка времени Unix. Посмотрите, как это сделать для других мест, где вы работаете со временем. Принимая это в качестве стандарта, вы можете просто передавать временные метки для ваших дат, не беспокоясь о форматировании, пока вы не будете готовы их отобразить.
Попробуйте [[textView textStorage] fixFontAttributeInRange:range]; после [[textView textStorage] replaceCharactersInRange: диапазон withAttributedString: vString] в recolorRange:
Я думаю, что проблема редактирует текстовое устройство хранения данных снова в ответ на processEditing, который уже является заключительной частью редактирования. - [NSTextStorage processEditing] использует fixFontAttributeInRange: но так как Вы пытаетесь отредактировать снова, что-то идет не так, как надо, и поведение фиксации отбрасывается.
Когда Вы делаете это для целого документа, существует нормальная последовательность beginEditing/endEditing/processEditing, которая вызывает fixFontAttributeInRange: быть названным счастливо.