Я прочитал Подклассы NSManagedObject с swift 3 и Xcode 8 beta и прочитал этот отличный учебник.Еще есть вопросы по некоторым пунктам.
Сходства:
- Я могу настроить оба класса так, как мне нравится.
- Я могу добавить новые атрибуты или удалить или переименоватьатрибутов.то есть для
category/extension
он будет обновлен после новой сборки (в производных данных), а в случае manual/none
он оставит файл класса без изменений и обновит расширение в файловой навигации, т.е. я не буду в конечном итоге сдубликат файла.Все это обрабатывается Xcode, потому что они помечены препроцессором @NSManaged
- . Выгрузка чего-то вроде
@NSManaged public var name: String?
прямо в существующий подкласс NSManagedObject
недопустима.Я пытался сделать entity.name = "John"
, но я получил следующую ошибку: reason: '-[SomeEntity setName:]: unrecognized selector sent to instance 0x60400009b120'
.Я считаю, что это разумно.Я думаю, что без использования Core Data Model Editor методы доступа метода установки / получения не создаются.
Различия:
Для
Category/Extension
вам просто нужно создать класс самостоятельно и добавить любые дополнительные функции / свойства, которые вам нужны.
Для Category/Extension
атрибуты создаются в производных данных, что достаточно.Потому что вам никогда не нужно видеть этот файл.Его существования достаточно, чтобы все заработало.
И особенно в контексте внесения изменений в ваши свойства NSManaged:
Изменение типа свойства,Например, NSDate
до Date
разрешено только для Manual/None
.Пример здесь
Изменение опциональности типа, например,
String?
на
String
, разрешено только для
Manual/None
.Пример
здесь Изменение уровня доступа к свойству, например, с public
на private
, разрешено только для Manual/None
.Пример здесь
Имея это в виду, есть существенная разница , если Я выбираю Manual/None
Codegen и но не выберите «создать подкласс NSManagedObject».В этом случае я сам начинаю писать весь код (подкласс от NSManagedObject и пишу NSManaged для каждого свойства) ... или, если я сам не пишу весь этот код, я все равно могу получить доступ к / установить поля, используя KVC, что неудобно!
В двух словах, я просто пытаюсь выяснить весь спектр возможностей, которые я могу получить от использования Manual/None
.
Вопрос: Помимо 9 заметок , которые мне нужно знать, правильно ли я проверил, важен вопрос : какизменение NSDate
на Date
или необязательное на необязательное не нарушает сопоставления между моим классом NSManagedObject и моим графом объектов при изменении свойства NSDate
на String
действительно нарушает !!Имеет ли это какое-то отношение к вещам, которые гарантированно приводятся между Swift и Objective-C, т.е. к вещам, которые можно кастовать через as
- без ?
или !
?