Создайте подкласс NSManagedObject, не создавая свойство после обновления до Xcode 6.0 - программирование

Создайте подкласс NSManagedObject, не создавая свойство после обновления до Xcode 6.0

После обновления до Xcode Version 6.0 (6A313), когда я добавляю новый атрибут в мою запись xcdatamodeld, "Создать подкласс NSManagedObject" не добавляет новое свойство в сгенерированный заголовочный файл. Это отлично работает после закрытия Xcode 6, а затем запускает версию 5.1.1 (5B1008). Я повторил этот процесс пару раз с теми же результатами. Нужно ли мне что-то делать, чтобы новая версия Xcode могла правильно управлять моими моделями данных или воссоздавать их, или это, возможно, просто ошибка с новым Xcode?

Вот конкретные шаги, которые я предпринял:
1. Откройте DataModel.xcdatamodeld в Xcode 6.0 (GM Seed).
2. Выберите правильный объект
3. Нажмите +, чтобы добавить новый атрибут
4. Введите имя и выбранный тип Boolean для нового атрибута
5. Редактор- > Создать подкласс NSManagedObject
6. Убедитесь, что проверена правильная модель данных, нажмите "Далее" 7. Убедитесь, что установлен правильный объект, щелкните следующий
8. Выберите место для сохранения (используя корневую папку проекта), выберите Создать | 9. Выберите "Заменить" в диалоговом окне
10. Посмотрите на переменную в сгенерированном файле заголовка. Переменной нет.
11. Закрыть Xcode6
12. Повторите шаги 1-10 в Xcode 5.1.1, правильно обработанные
13. Повторите этот процесс дважды, чтобы проверить те же результаты

Спасибо за любую помощь!

4b9b3361

Ответ 1

Хорошо, я выяснил обходное решение, но, похоже, это ошибка.

Для всех объектов, которые вы хотите регенерировать, удалите существующие файлы с диска, попробуйте Редактировать- > Создать подкласс NSManagedObject и выберите те классы, которые вы удалили с диска.

Файлы, которые в настоящее время не существуют, восстанавливаются. Это исправило проблему для меня.

Ответ 2

У меня была та же проблема, Xcode не генерировал новые свойства после того, как я выбрал файлы "Заменить".
Просто исправьте это, выполнив следующие шаги:

  • после изменения или добавления нового объекта в .xcdatamodel выберите измененный объект. Файлы классов в списке Группы и файлы.
  • выберите "Удалить" - "Переместить в корзину" (при необходимости скопируйте определенный код из файла класса)
  • Теперь вернитесь к .xcdatamodel и выберите объект, который вы изменили.
  • создать новый подкласс NSManagedObject (используйте стандартный способ)

Ответ 3

Это требует обходного пути, но, в частности, самым быстрым способом я нашел:

  • Настройте свой проект таким образом, чтобы сгенерированные файлы из модели были в их собственной папке.

  • Если вам нужно добавить/изменить атрибуты в вашей модели, выберите набор автоматически сгенерированных файлов и нажмите backspace (и выберите их в корзину)

  • Сгенерируйте свой набор файлов NSManagedObject из модели, обратно в ту же папку

Ответ 4

Перед удалением файлов и/или самой модели данных, как было предложено, проверьте, добавили ли вы имя модуля в инспекторе модели данных Xcode в группе Entity/Class. Если у вас есть, его удаление решит проблему автоматического создания классов сущностей. Тем не менее, он снова включит проблему, которую вы исправили, добавив ее в первую очередь (см. Swift - CoreData: warning: Не удалось загрузить класс с именем)... С помощью этого в самом деле, представляется лучшим решением добавить @objc(<ClassName>) выше сгенерированного класса, чем добавить имя модуля в инспектор.