jod*_*odm 22 iphone core-data objective-c nsattributedstring
我试图将NSAttributedString存储到Core Data SQL存储.
我将属性设置为"可转换",它是可选的,它不是瞬态的或索引的,并且值转换器名称设置为默认值"NSKeyedUnarchiveFromData".在.xcdatamodel中并生成在.h中具有此内容的托管对象类:
@property (nonatomic, retain) id Text; (I have tried changing id to NSAttributedString *Text)
Run Code Online (Sandbox Code Playgroud)
这在.m中:
@dynamic Text;
Run Code Online (Sandbox Code Playgroud)
我查看并将我的NSManagedObject的".text"属性设置为属性字符串,然后在完成时执行:
NSError *error = nil;
[managedObjectContext save:&error];
Run Code Online (Sandbox Code Playgroud)
此过程导致输出中出现此错误:
[NSCFType encodeWithCoder:]:发送到实例0xc04edb0的无法识别的选择器由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' * - [NSCFType encodeWithCoder:]:无法识别的选择器发送到实例0xc04edb0'
我已经检查了我存储到属性的类的类,它NSAttributedString
也是我检查responsesToSelector @selector(:)
并返回true,所以非常困惑,因为这与错误消息相反?
请指教.
谢谢詹姆斯
pob*_*b21 11
对于遇到此问题的任何人,我找到了最简单的解决方案:
在Core Data中添加一个属性,让我们调用它 attributedText
.然后将其类型定义为Transformable
.创建.h文件后,将attributedText
from 的数据类型更改NSDictionary
为NSAttributedString
.
现在您可以保存NSAttributedString
核心数据而无需进行任何修改.
回顾它就像去一样容易:
myObject.attributedText
Run Code Online (Sandbox Code Playgroud)
这将返回你的NSAttributedString
!
希望这有助于某人.
我正在检查Apple开发者论坛,并发现一个与此问题几乎完全相同的主题,一个人已经这样做但很遗憾没有共享代码.他们所说的只是以下内容:
"在核心数据中,我在数据库中有一个可转换的,我是我自己的NSVauleTransformer.这是一个子类,NSValueTransformer
并从数据对象和后面创建一个属性字符串.
因此,我创建了一个名为类PersistableAttributedString
是NSCoding
兼容的.此类具有字符串和属性数组,并构建属性字符串.我还为NSCoding
符合条件的可能文本属性创建了一个类.字符串和属性一起都是NSCoding
兼容的.
该类NSAttributedString
也是NSCoding
合规的,但属性不是,这就是问题所在."
希望可能有所帮助.
在具有自动代码生成功能的 Xcode 10 中,这比其他建议简单得多。
Attribute Type
为Transformable
Custom Class
为NSAttributedString
就是这样,现在您可以按照预期将数据保存在 Swift 代码中,例如:
detailItem.content = textView.attributedText