Цель 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];