xcode 7生成具有附加CoreDataProperties类别的核心数据实体

Yev*_*hev 35 xcode core-data ios xcode7

我在xcode 7中有一个奇怪的新功能,当我生成新的NSManagedObject子类时,xcode创建了两个类:entity和它们的CoreDataProperties类,它们包含完整的实现.在下图中我的意思是一个例子.

在此输入图像描述

我找不到任何关于此的文档信息,谁能解释为什么会这样

Les*_*ary 46

我刚注意到这一点,也找不到任何关于它的文档,但我已经尝试了这个新功能,它的工作原理如下.当您首次从Core Data模型生成NSManagedObject子类时,Xcode将生成4个文件:

DBUser.h

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

NS_ASSUME_NONNULL_BEGIN

@interface DBUser : NSManagedObject

// Insert code here to declare functionality of your managed object subclass

@end

NS_ASSUME_NONNULL_END

#import "DBUser+CoreDataProperties.h"
Run Code Online (Sandbox Code Playgroud)

DBUser.m

#import "DBUser.h"

@implementation DBUser

// Insert code here to add functionality to your managed object subclass

@end
Run Code Online (Sandbox Code Playgroud)

DBUSER + CoreDataProperties.h

#import "DBUser.h"

NS_ASSUME_NONNULL_BEGIN

@interface DBUser (CoreDataProperties)

@property (nullable, nonatomic, retain) NSNumber *id;
@property (nullable, nonatomic, retain) NSString *name;

@end

NS_ASSUME_NONNULL_END
Run Code Online (Sandbox Code Playgroud)

DBUSER + CoreDataProperties.m

#import "DBUser+CoreDataProperties.h"

@implementation DBUser (CoreDataProperties)

@dynamic id;
@dynamic name;

@end
Run Code Online (Sandbox Code Playgroud)

因此,您现在可以看到所有属性都在一个带有类别(CoreDataProperties)的单独文件中.稍后如果为同一模型生成NSManagedObject子类,Xcode 7将只重新生成2个带类别的文件(DBUser + CoreDataProperties.h和DBUser + CoreDataProperties.m)来更新模型中的所有属性,但不会对其他2个文件进行任何更改(DBUser.h和DBUser.m)所以你可以使用这两个文件来添加一些自定义方法或属性等.

在以前的版本中,Xcode始终只生成2个文件(DBUser.h和DBUser.m),并且它将属性放在那里,因此您无法轻松修改这些文件,因为每次重新生成子类时都会删除自定义实现.因此,通常的做法是手动创建一个类别,并将您的方法放在您的类别中,这与我们在Xcode 7中可以看到的相反.然而,由于我们不得不使用一个类别来实现我们的方法而不是允许做某些事情,现在我们可以轻松修改主界面和实现文件,这使我们可以用它做任何事情.欢呼!