目标c - 如何使用SQLite保存文本样式?

时间:2017-07-08 15:39:40

标签: ios sqlite tableview

我正在创建一个便笺管理应用。要保存我使用SQLite的各种笔记。问题是,如果我修改一个注释,例如,更改字体或将其转换为粗体或斜体,然后保存它,当重新提取注释时,它已丢失(当然)所有属性并写入正常的方式。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您必须存储属性字符串,而不仅仅是字符串。然后使用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];