【问题标题】:How can I implement a custom mapping model for Core Data?如何为 Core Data 实现自定义映射模型?
【发布时间】:2012-08-29 03:10:37
【问题描述】:

我在核心数据模型中添加了一个新实体(站点),并与指向站点的旧实体(通知)建立了关系。我需要做的是用单个对象填充新实体(新对象的属性值现在在用户默认值中),然后将所有旧对象分配给表示关系的变量。

站点对象上的通知变量是一对多且可选的。 Notification 对象上的 site 变量是一对一的并且是必需的。

我的新对象如下所示:

#import <Foundation/Foundation.h>

@interface Site : NSManagedObject

@property (nonatomic, retain) NSString *url;
@property (nonatomic, retain) NSString *accessKey;
@property (nonatomic, retain) NSString *secretKey;
@property (nonatomic, retain) NSSet *notifications;

@end

旧对象有一个新的“站点”属性:

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "Site.h"


@interface Notification : NSManagedObject

@property (nonatomic, retain) NSNumber *created;
@property (nonatomic, retain) NSNumber *isRead;
@property (nonatomic, retain) NSString *message;
@property (nonatomic, retain) NSNumber *notificationId;
@property (nonatomic, retain) NSString *url;
@property (nonatomic, retain) NSString *urlMarkRead;
@property (nonatomic, retain) Site *site;

@end

有什么想法可以做到这一点吗?

【问题讨论】:

  • 您想将urlaccessKeysecretKeyNotification 移动到Site
  • 没有。我在共享用户默认值中有 url、accessKey 和 secretKey,并希望根据这些值创建一个新的站点对象。问题是,如果不先执行迁移,我无法加载新模型,我也无法执行轻量级迁移。
  • 我编辑了我的原始帖子以包含该信息。
  • 如果已回答,请将问题标记为已回答。谢谢。
  • 这是对现有应用程序的更新吗?如果没有,您只需要更新 XCDataModel,并从您的设备中删除应用程序(或重置模拟器上的设置)然后重新加载它。如果是更新,我会建议遵循 Daniel Eggert 的建议

标签: objective-c core-data core-data-migration


【解决方案1】:

您可以进行手动迁移。编写代码需要一些工作,但它会解决你的问题。

查看核心数据版本控制和数据迁移编程指南。在那里您会找到 迁移过程,其中有一个名为 自定义实体迁移策略 的小节描述了您的情况。

您需要创建NSEntityMigrationPolicy 的子类。

【讨论】:

  • 谢谢。我刚刚清除了我的数据并从头开始使用我的模型的新版本,但是这些信息将来会很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
相关资源
最近更新 更多