我应该如何在CoreData中建模键/值对?

时间:2012-11-08 17:22:29

标签: ios core-data data-modeling

我使用CoreData存储以下类:

@interface TripSegment : NSManagedObject

@property (nonatomic, retain) NSString * details;
@property (nonatomic, retain) NSDate * endsOn;
@property (nonatomic, retain) NSString * segmentCategory;
@property (nonatomic, retain) NSDate * startsOn;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSString * tripSegmentId;
@property (nonatomic, retain) ContextCard *contextCard;
@property (nonatomic, retain) Location *endsAt;
@property (nonatomic, retain) Location *startsAt;
@property (nonatomic, retain) Trip *trip;

@end

对于某些TripSegments(例如航班),我会收到一些额外的数据,如确认号码或座位分配。我想以灵活的方式存储这些数据,因此当我发现在UI中呈现更多有用的东西时,我可以将其包含在服务中并开始使用它而无需迁移模型或处理复杂的类层次结构

如何将键/值添加到CoreData存储中持久存储的对象?或者,我是否必须制作特定的课程来代表航班或酒店住宿,并将这些课程与人际关系分开?

1 个答案:

答案 0 :(得分:1)

我认为你有几个选择。

  1. 您可以为TripSegment课程添加二进制数据属性,并使用NSKeyedArchiver转换NSDictionary存储额外属性NSData
  2. 您可以实现自己的通用键/值对核心数据对象,并在TripSegment和该类之间建立一对多关系。
  3. 您可以使用NSJSONSerialization将额外数据与JSON转换为JSON,并将其作为String属性存储在TripSegment类中。
  4. 我认为这实际上取决于您希望如何使用您正在获取的额外数据。如果您需要能够独立于TripSegment查询属性(例如,获取已分配的所有席位分配),那么拥有单独的键/值样式类可能是最佳选择。如果您需要CD数据来存储二进制信息作为收到的额外信息的一部分,那么可能JSON序列化将不是最佳选择,因为数据大小可能会因base64转换而爆炸。