gpt4 book ai didi

objective-c - 存储和检索NSAttributedString

转载 作者:行者123 更新时间:2023-12-03 19:43:12 26 4
gpt4 key购买 nike

我想为UITextView的NSAttributedString存储我的Rich Text。对于这个问题,我选择了NSData。问题是在取消存档和检索到的数据也与保存的NSData不同时,应用程序崩溃了。

说明
D B:
将数据保存到数据库

在数据库中,我有一列名为rtfText,数据类型为blob->(rtfText blob)
保存到数据库时,我这样做

NSData *data = [NSKeyedArchiver archiveWithRootObject:_myTextView.attributedString];


并在查询中发送这样的数据

NSString Query = [NSString stringWithFormat:@"Insert into table (rtfText) VALUES \"%@\")",data];


从数据库检索数据

数据是这样检索的:

NSData *data = [[NSData alloc] initWithBytes:(sqlite3_column_blob(statement, 18)) length:sqlite3_column_bytes(statement, 18)];


取消归档:

从数据库中检索到的NSData中,我将其取消归档到NSAttributedString中,如下所示

_myTextView.attributedText = [NSKeyedUnarchiver unarchiveObjectWithData:data];  **<- App Crashes at this point giving error**


错误:
-[__ NSCFData objectForKey:]:无法识别的选择器已发送到实例0x15d56e80

我什至尝试在存档后将NSAttributedString保存为NSData,然后使用NSASCIIStringEncoding将其转换为NSString,但随后数据库崩溃。我也尝试过这样保存它。首先使用NSKeyedArchiver将NSAttributedString转换为NSData,然后使用NSUTF8StringEncoding转换为NSString,这给了我空字符串。

请调查一下。

提前致谢

最佳答案

数据切勿将其正确插入数据库。原因是在sqlite3上的查询始终采用UTF8的形式。必须将NSString转换为UTF-8才能进行查询。转换之后,存储在数据库中的NSData会完全更改,即通过UTF-8再次编码。

当我检索数据时,它与旧数据不同。因此在取消存档时出错。

解决方案:将NSData存储到sqlite3中而不转换为UTF-8,并使用sqlite_bind_blob将blob数据存储到sqlite3数据库中。

关于objective-c - 存储和检索NSAttributedString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26135008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com