Дублированное объявление подклассов NSManagedObject

Итак, когда моя модель данных готова, я попытался сгенерировать подклассы, когда мой файл модели данных открыт:

Редактор -> Создать подклассы объектов NSManaged

Хорошо, создаются два файла, один — объявление класса, другой — свойство.

Однако мне сразу же подсказали, что я сделал переобъявление уже существующего класса. Здесь находятся исходные сгенерированные файлы: ранее сгенерированные файлы

Мой вопрос очевиден:

  1. Когда были сгенерированы эти два файла?
  2. Что делать, если я хочу, чтобы эти файлы были в моем навигаторе проекта и, конечно же, в той же папке, что и мой ViewController?

person David Wu    schedule 30.10.2016    source источник
comment
Прочтите: stackoverflow.com/a/39933534/1457385 и/или посмотрите developer.apple.com/videos/play/wwdc2016/242   -  person shallowThought    schedule 31.10.2016
comment
Установите Codegento Manual/None в вашей .xcdatamodel для всех сущностей, по-видимому, это ключ.   -  person David Wu    schedule 31.10.2016


Ответы (4)


Вы создаете файлы, которые уже были сгенерированы для вас Xcode, и, таким образом, получаете повторяющиеся объявления.

Подробности см. в этом ответе.

person shallowThought    schedule 01.11.2016
comment
Одна из проблем использования определения класса заключается в том, что при подключении телефона и изменении на него устройства сборки автоматически сгенерированные файлы подклассов автоматически теряют ссылку на них, то есть - xcode выдает сообщение об ошибке отсутствия определения основные классы данных, используемые в вашем ViewController. - person David Wu; 05.11.2016
comment
Здесь отлично строится с указанными настройками. Если ваша проблема не устранена, возможно, опубликуйте ссылку на минимальный образец проекта, показывающий проблему, чтобы мы могли посмотреть. - person shallowThought; 05.11.2016

Обычно в существующую сущность в базовой модели данных вносятся изменения.

Предположим, вы добавляете поле в существующую сущность в основной модели данных, вам придется перегенерировать класс для этой сущности, чтобы включить это поле.

При регенерации этого класса будет возможность перезаписать существующие файлы.

Чтобы ответить на ваши вопросы:

  1. Вероятно, он был создан, когда было сделано предыдущее изменение объекта.
  2. Переместите ранее сгенерированные файлы на рабочий стол. Затем создайте новые файлы. Посмотрите, в чем разница между двумя наборами файлов, и примите соответствующие меры. Если я не ошибаюсь, один файл будет расширением, а другой - файлом класса.
person user1046037    schedule 31.10.2016

Итак, правильный ответ кажется тому, кто прокомментировал мой вопрос. Исходное сообщение находится здесь: https://stackoverflow.com/a/39933534/5642467.

Удалите все сгенерированные подклассы NSManagedObject из вашего проекта, если они существуют.

Установите Codegento Manual/None в вашем .xcdatamodel для всех сущностей. Чистый проект. --- Это ключевой шаг, который по умолчанию настроен Xcode8 на автоматический.

Очистить папку DerivedData

Перезапустите Xcode

Вручную создать подклассы NSManagedObject (в меню «Редактор»)

Убедитесь, что эти файлы добавлены в сборку вашего проекта.

Если проблема не устранена, повторите:

Чистый проект

Очистить папку DerivedData

Перезапустите Xcode

person David Wu    schedule 31.10.2016

В вашем xcdatamodeld вы должны изменить Entity Class Codegen на Manual/None на панели Utilities перед компиляцией.

введите здесь описание изображения

person Bisca    schedule 03.05.2017