0

我正在使用 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 存储中持久的对象?或者我是否必须创建特定的类来表示航班或酒店住宿,并通过关系将它们分开保存?

4

2 回答 2

1

在我看来,您有几个选择。

  1. 您可以将 Binary Data 属性添加到您的TripSegment类中,并使用 aNSKeyedArchiverNSDictionary存储额外的属性转换为NSData
  2. TripSegment您可以实现自己的通用键/值对核心数据对象,并在您和该类之间建立一对多的关系。
  3. 您可以将您的额外数据与 JSON 相互转换NSJSONSerialization,并将其作为 String 属性存储在您的TripSegment类中。

我认为这真的取决于你想如何使用你得到的额外数据。如果您需要能够独立于 查询属性TripSegment(例如,获取所有已分配的座位分配),那么最好有一个单独的键/值样式类。如果您需要 CD 数据将二进制信息存储为接收到的额外信息的一部分,那么 JSON 序列化可能不是最佳选择,因为数据大小可能会随着 base64 转换而爆炸。

于 2012-11-08T23:46:43.313 回答
0

正如我在@rickerbh 的回答中指出的那样,如果您确实需要在运行时添加自定义属性,我会选择选项#2——我认为您不需要

我知道您只是不想很好地迁移...只需将您的妈妈变成妈妈并对其进行版本化。只要您只是在模型中添加或重命名属性,coredata 就可以透明地迁移 => 对您没有用 :)

这是最干净的IMO

于 2012-11-09T01:11:48.473 回答