Решение для автоматически созданных классов
из генератора кода Xcode (iOS 10 и выше)
Если вы создаете объект с именем «YourClass», Xcode автоматически выберет «Определение класса» по умолчанию в качестве типа Codegen в «Инспекторе модели данных». это сгенерирует классы ниже:
Быстрая версия:
// YourClass+CoreDataClass.swift
@objc(YourClass)
public class YourClass: NSManagedObject {
}
Версия Objective-C:
// YourClass+CoreDataClass.h
@interface YourClass : NSManagedObject
@end
#import "YourClass+CoreDataProperties.h"
// YourClass+CoreDataClass.m
#import "YourClass+CoreDataClass.h"
@implementation YourClass
@end
Мы выберем «Категория / Расширение» из опции Codegen вместо «Определение класса» в Xcode.
Теперь, если мы хотим добавить перечисление, создайте другое расширение для вашего автоматически сгенерированного класса и добавьте сюда свои определения перечисления, как показано ниже:
// YourClass+Extension.h
#import "YourClass+CoreDataClass.h" // That was the trick for me!
@interface YourClass (Extension)
@end
// YourClass+Extension.m
#import "YourClass+Extension.h"
@implementation YourClass (Extension)
typedef NS_ENUM(int16_t, YourEnumType) {
YourEnumTypeStarted,
YourEnumTypeDone,
YourEnumTypePaused,
YourEnumTypeInternetConnectionError,
YourEnumTypeFailed
};
@end
Теперь вы можете создавать собственные средства доступа, если хотите ограничить значения перечислением. Пожалуйста, проверьте принятый ответ владельцем вопроса . Или вы можете преобразовать свои перечисления, задав их явным методом преобразования, используя оператор приведения, как показано ниже:
model.yourEnumProperty = (int16_t)YourEnumTypeStarted;
Также проверьте
Автоматическое создание подкласса Xcode
Xcode теперь поддерживает автоматическое создание подклассов NSManagedObject в средстве моделирования. В инспекторе сущностей:
Вручную / Нет - по умолчанию и предыдущее поведение; в этом случае вы должны реализовать свой собственный подкласс или использовать NSManagedObject. Категория / расширение создает расширение класса в файле с именем типа ClassName + CoreDataGeneratedProperties. Вам необходимо объявить / реализовать основной класс (если в Obj-C, через заголовок, который расширение может импортировать с именем ClassName.h). Определение класса создает файлы подкласса с именами типа ClassName + CoreDataClass, а также файлы, созданные для категории / расширения. Сгенерированные файлы помещаются в DerivedData и перестраиваются при первой сборке после сохранения модели. Они также индексируются Xcode, поэтому работает щелчок по ссылкам и быстрое открытие по имени файла.
enum
s?