Ответ 1
Я только что заметил это, а также не смог найти документацию об этом, но я экспериментировал с этой новой функцией, и она работает именно так. Когда вы сначала создаете подкласс NSManagedObject из вашей модели Core Data, тогда 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), чтобы вы могли использовать эти 2 файла, чтобы добавить туда некоторые пользовательские методы или свойства и т.д.
В предыдущей версии Xcode генерировал только 2 файла (DBUser.h и DBUser.m), и он помещал свойства там, поэтому вы не могли легко изменить эти файлы, потому что ваша пользовательская реализация была удалена каждый раз, когда вы восстанавливали свои подклассы. Поэтому было обычной практикой вручную создавать категорию и помещать ваши методы в вашу категорию, которая была неочевидна для того, что мы можем видеть в Xcode 7. Это, однако, имело много недостатков, потому что нам приходилось использовать категорию для реализации наших методов, которая не позволяют делать определенные вещи, и теперь мы можем легко модифицировать основные файлы интерфейса и реализации, что позволяет нам что-то делать с ним. Ура!