Objective c 如何实现核心数据的自定义映射模型?

Objective c 如何实现核心数据的自定义映射模型?,objective-c,core-data,core-data-migration,Objective C,Core Data,Core Data Migration,我已经在我的核心数据模型中添加了一个新实体(站点),并与指向站点的旧实体(通知)建立了关系。我需要做的是用单个对象填充新实体(新对象的属性值现在是用户默认值),然后将所有旧对象分配给表示关系的变量 Site对象上的notifications变量是一对多且可选的。通知对象上的站点变量是一对一且是必需的 我的新对象看起来是这样的: #import <Foundation/Foundation.h> @interface Site : NSManagedObject @property

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

Site对象上的notifications变量是一对多且可选的。通知对象上的站点变量是一对一且是必需的

我的新对象看起来是这样的:

#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
#导入
@接口站点:NSManagedObject
@属性(非原子,保留)NSString*url;
@属性(非原子,保留)NSString*accessKey;
@属性(非原子,保留)NSString*secretKey;
@属性(非原子,保留)NSSet*通知;
@结束
旧对象具有新的“站点”属性:

#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
#导入
#进口
#导入“Site.h”
@接口通知:NSManagedObject
@属性(非原子,保留)NSNumber*已创建;
@属性(非原子,保留)NSNumber*isRead;
@属性(非原子,保留)NSString*消息;
@属性(非原子,保留)NSNumber*notificationId;
@属性(非原子,保留)NSString*url;
@属性(非原子,保留)NSString*urlMarkRead;
@不动产(非原子,保留)场地*场地;
@结束

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

您可以进行手动迁移。这将是一些工作,为你编码,但它会解决你的问题

请参阅《核心数据版本控制和数据迁移编程指南》。在这里,您将看到迁移过程中有一个称为CustomEntityMigrationPolicys的小节,该小节描述了您的情况


您需要创建
NSEntityMigrationPolicy

的子类,以便将
url
accessKey
secretKey
Notification
移动到
Site
?否。我在共享用户默认设置中有url、accessKey和secretKey,并希望基于这些值创建新的Site对象。问题是,我不能在不执行迁移的情况下加载新模型,也不能进行轻量级迁移。我编辑了我的原始帖子以包含这些信息。请将问题标记为已回答(如果是)。谢谢。这是对现有应用程序的更新吗?如果没有,您只需要更新XCDataModel,并从设备中删除应用程序(或重置模拟器上的设置),然后重新加载它。如果这是一个更新,我会推荐遵循丹尼尔·艾格特的建议谢谢。我只是清理了我的数据,用我的模型的新版本从头开始,但是这些信息在将来会很有用。