如何在Coredata中存储带有struct的自定义对象

时间:2010-08-16 10:50:07

标签: iphone objective-c core-data

我必须将自定义类对象存储到Coredata。问题是我的自定义类包含结构,枚举等。我尝试了以下方法。

  

- (void)encodeWithCoder:(NSCoder *)编码器。

但是我收到了这个错误

  

[NSKeyedArchiver encodeValueOfObjCType:at:]:此归档程序无法编码结构体

将此对象存储到Coredata的最佳做法是什么。请帮帮我。

3 个答案:

答案 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对象一样。

有了枚举,我不太确定。枚举只是与名称相关联的数字,因此只需将它们编码并解码为数字。