Цель c - Как сохранить стиль текста с SQLite?

Я создаю приложение для управления заметками. Для сохранения различных заметок я использую SQLite. Проблема заключается в том, что если я изменяю заметку, например, изменяю шрифт или превращаю ее в жирный или курсив, а затем сохраняю ее, при повторном извлечении заметки она теряет (конечно) все атрибуты и записывается в нормальный способ. Как я могу решить эту проблему?

1 ответ

Решение

Вы должны хранить приписанную строку, а не только строку. Затем используйте NSKeyedArchiver, чтобы преобразовать его в необработанные данные. Есть несколько способов сделать это, но вы можете попробовать конвертировать в base64 и затем сохранить его в BLOB-объекте. Попробуйте это преобразовать данные. В моем случае "отчет" - это NSTextView;

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

  NSString *encodedString = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

Результирующая строка encodedString может быть вставлена ​​в SQLite.

Чтобы вернуть его обратно, измените процесс;

  NSString *reportCoded = [aReportRecord valueForKey:@"reportContents"];

  NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:reportCoded options:NSDataBase64DecodingIgnoreUnknownCharacters];

  NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:decodedData];

  NSAttributedString* newString = [unarchiver decodeObjectForKey :@"attrs"];

  [[self.report textStorage] appendAttributedString:newString];
Другие вопросы по тегам