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