Преобразование отформатированного текста NSTextView в NSData (и обратно)

Как мне преобразовать содержимое NSTextView в NSData, а затем преобразовать его обратно и отобразить на Mac OS X?

Я могу конвертировать текст без форматирования с помощью textView.textStorage.string (где textView является NSTextView объект). Однако я хочу также сохранить форматирование текста.

На самом деле я реализовал подход, который работает, но я не уверен, что он всегда будет работать. Я кодирую NSTextStorage сам объект и запишите его, а затем прочитать его обратно как NSAttributedString, (NSTextStorage это подкласс NSAttributedString.) Я делаю это, потому что не могу установить напрямую textStorage для NSTextView, но я могу установить его атрибутивную строку.

Вот мой код для его преобразования (результат в data):

NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];          
[archiver encodeObject:textView.textStorage forKey:@"attrs"];
[archiver finishEncoding];

Чтобы прочитать это обратно:

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSAttributedString* theAttrString = [unarchiver decodeObjectForKey:@"attrs"];
[unarchiver finishDecoding];

и отобразить это:

[textView.textStorage setAttributedString:theAttrString];

Этот подход гарантированно сработает, учитывая, что я кодирую NSTextStorage объект и читать его обратно, интерпретируя его как NSAttributedString?

1 ответ

Решение

Да, это будет работать. NSTextStorage будет использовать NSCoding реализация NSAttributedStringпоэтому, когда вы кодируете данные, вы на самом деле будете кодировать NSAttributedString, Это означает, что вы будете читать данные обратно как неизменный объект, даже если вы написали изменяемый объект.

Очевидно, это нормально, если вы используете setAttributedString: метод, поэтому вы будете использовать закодированные неизменяемые данные для обновления изменяемого состояния. Это должно работать безупречно, если ваш код сериализации / десериализации верен.

Другие вопросы по тегам