我刚刚注意到这一点,也找不到任何有关它的文档,但我已经尝试过这个新功能,它的工作原理如下。当您第一次从 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"
DBUser.m
#import "DBUser.h"
@implementation DBUser
// Insert code here to add functionality to your managed object subclass
@end
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
DBUser+CoreDataProperties.m
#import "DBUser+CoreDataProperties.h"
@implementation DBUser (CoreDataProperties)
@dynamic id;
@dynamic name;
@end
正如您现在所看到的,所有属性都位于带有类别(CoreDataProperties)的单独文件中。稍后,如果您为同一模型生成 NSManagedObject 子类,Xcode 7 将仅重新生成 2 个具有类别的文件(DBUser+CoreDataProperties.h 和 DBUser+CoreDataProperties.m)以更新模型中的所有属性,但不会对其他 2 个文件进行任何更改(DBUser.h 和 DBUser.m),因此您可以使用这两个文件添加一些自定义方法或属性等。
在以前的版本中,Xcode 始终只生成 2 个文件(DBUser.h 和 DBUser.m),并将属性放在那里,因此您无法轻松修改这些文件,因为每次重新生成子类时您的自定义实现都会被删除。因此,手动创建一个类别并将方法放入类别中是一种常见的做法,这与我们在 Xcode 7 中看到的相反。然而,这有很多缺点,因为我们必须使用一个类别来实现我们的方法,但它不会允许做某些事情,现在我们可以轻松修改主界面和实现文件,这允许我们用它做任何事情。欢呼!