我必须将自定义类对象存储到Coredata。问题是我的自定义类包含结构,枚举等。我尝试了以下方法。
- (void)encodeWithCoder:(NSCoder *)编码器。
但是我收到了这个错误
[NSKeyedArchiver encodeValueOfObjCType:at:]:此归档程序无法编码结构体
将此对象存储到Coredata的最佳做法是什么。请帮帮我。
答案 0 :(得分:6)
您可以将结构包装在NSData
中,即
使用存档程序进行编码
[coder encodeObject:[NSData dataWithBytes:&my_struct length:sizeof(my_struct)]
forKey:@"my_struct"];
并使用归档器进行解码
NSData *data = [coder decodeObjectForKey:@"my_struct"];
[data getBytes:&my_struct length:sizeof(my_struct)];
答案 1 :(得分:4)
您应该在自定义类中拥有NSCoding协议的自定义实现。在您自己的-[initWithCoder:]
和-[encodeWithCoder:]
实现中,您可以以任何方式对结构对象进行编码/解码。
执行此操作的方法是拨打[coder encodeObject:[NSValue valueWithBytes:&yourStructVariable objCType:@encode(struct YourStructName)] forKey:@"someKey"];
中的-[encodeWithCoder:]
并在-[initWithCoder:]
中进行等效解码。
然后,您可以将类对象存储为可在Core Data中转换。
答案 2 :(得分:1)
我认为,使用结构,最好创建一个可以对结构进行编码和解码的函数,就像任何Objective-C对象一样。
有了枚举,我不太确定。枚举只是与名称相关联的数字,因此只需将它们编码并解码为数字。