Подтвердить что ты не робот

XCode Cant 'Редактировать модель CoreData

После добавления модели CoreData в мой существующий проект с помощью

File > New > File... > Core Data > Data Model

Я не могу редактировать модель. Проект теперь включает в себя ссылку на пакет .xcdatamodeld, но щелчок по нему в Project Navigator имеет тот же эффект, что и нажатие на папку или группу, текущий редактор не изменяется. Также, щелкнув правой кнопкой мыши ссылку и выбрав "Открыть как", нет никаких потенциальных редакторов. Кроме того, при открытии панели инспектора файлов перечислены только настройки "Идентификация" "Целевое членство" и "Настройки текста", в нем не указаны параметры "Модель основных данных" или "Модель данных с версией ядра"

Не то, чтобы это не влияло на способность XCodes распознавать тип файла, но я также ссылался на CoreData.framework в фазах сборки и включал необходимые свойства Core Data в AppDelegate.

Странно, что я открыл пакет .xcdatamodeld в Finder, чтобы открыть внутренний .xcdatamodel(обратите внимание на конечный 'd'). Двойной щелчок по этому файлу откроет XCode с редактором модели основных данных, как и ожидалось.

Еще еще странно, я создал новый проект и нажал кнопку "Использовать основные данные". Это позволило мне изменить модель данных, выбрав ссылку .xcdatamodeld в Навигаторе проектов. Следовательно, моя машина и XCode способны и настраиваются для редактирования файлов CoreData.

Как будто XCode не может использовать Core Data, если исходный проект не был создан с помощью "Использовать основные данные".

Кто-нибудь испытал эту проблему, смогли ли вы ее исправить и как?

Спасибо!

4b9b3361

Ответ 1

Оказывается, я пытался добавить модель данных в группу, которая ссылалась на определенную папку для хранения дочерних элементов. Однако этой папки не было. Это приводит к тому, что XCode размещает модель данных в корне проекта, но в то же время ссылается на нее как на 2 каталога над корнем проекта. Что еще более странно, так это то, что XCode не перечислял файл как отсутствующий, отображая его красным цветом. В любом случае XCode игнорировал файл при нажатии в Project Navigator, потому что он действительно не существовал там, где он думал. Мораль этой истории: проверьте пути к файлам и настроенные групповые пути.

Ответ 2

Сегодня я столкнулся с этой проблемой, и проблема заключалась в том, что мой файл .xcdatamodel был упакован внутри себя (странно, я знаю). Вот как я его исправил:

  • Я нашел файл File.xcdatamodel в Finder.
  • Щелкните правой кнопкой мыши и выберите Показать содержимое пакета.
  • Внутри была другая копия File.xcdatamodel. Я скопировал это на свой рабочий стол.
  • Затем я перетащил этот файл в Xcode и открыл его.

Какое облегчение.:) Я надеюсь, что это поможет кому-то другому.

Ответ 3

Наша реальная проблема заключалась в том, что Xcode не смог открыть/проверить модель данных при создании новой версии. Значение: имеет первый .xcdatamodel, а затем Editor > Add Model Version... > MyProject 2 (как .xcdatamodel). После чего был создан MyPoject.xcdatamodel d, но его не удалось открыть.

После изучения часов мы выяснили, что файл .xcurrentversion и XCVersionGroup в файле проекта отсутствуют или недействительны. Одна из причин заключалась в том, что версия xcdatamodel d должна быть в корневой папке.

Easy Fast Solution 1:

Создайте новую версию модели и:

  • Задайте путь к корневой папке
  • Укажите Group как подкаталог, в котором находится предыдущая версия.

Новый .xcdatamodel d теперь будет работать с Xcode, но не может быть перемещен нигде, кроме корневой папки.

Сложное решение 2:

Чтобы иметь вложенную .xcdatamodel d в подпапке, вам нужно вручную изменить файл проекта, выполнив следующие шаги:

PS: Это самый сложный и хриплый ответ, который я написал. Извините: (

  • Создайте новую версию модели (даже если она недействительна для модели данных) в том же каталоге предыдущей версии.
  • Убедитесь, что в вашей цели указан новый файл .xcdatamodel d.
  • Откройте содержимое пакета в Finder и перетащите все версии xcdatamodel в проект.
  • Откройте файл project.pbxproj в текстовом редакторе.
  • Найдите новые файлы для всех моделей данных и скопируйте их fileId.

Пример:

75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel in Sources */ = {isa = PBXBuildFile; fileRef = 75F319981B9D80D50030FF46 /* MyProject 2.xcdatamodel */; };
// fileId = 75F3199D1B9D80D50030FF46 /* The first id at the beginning of the line */
  1. Переместите эти строки из раздела PBXBuildFile в начало PBXFileReference и обновите их следующим образом (повторно используйте fileId).

Пример:

75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MyProject 2.xcdatamodel"; sourceTree = "<group>"; };
  1. Теперь найдите файл MyPoject.xcdatamodeld в разделе PBXBuildFile и скопируйте его fileRef.

Пример:

75F319961B9D7FA50030FF46 /* MyProject.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */; };
// fileRef = 75F319931B9D7FA50030FF46
  1. Наконец, в самом конце файла project.pbxproj создайте раздел XCVersionGroup и повторно используйте fileRef из xcdatamodel d и всех fileId.

Пример (без комментариев //):

/* Begin XCVersionGroup section */
        75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */ = { // fileRed
            isa = XCVersionGroup;
            children = (
                75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */, // fileId
                75F319A11B9D80D50030FF46 /* MyProject.xcdatamodel */, // fileId
            );
            currentVersion = 75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */; // fileId of the current version
            name = MyProject.xcdatamodeld;
            path = Path/To/MyProject.xcdatamodeld; // set the correct path
            sourceTree = "<group>";
            versionGroupType = wrapper.xcdatamodel;
        };
/* End XCVersionGroup section */
    };
    rootObject = 7564EB681B4AB1560065394B /* Project object */;
} /* EOF */
  1. Теперь вы можете теперь открыть файл xcdatamodel d в Xcode из нужной подпапки.
  2. Теперь удалите дополнительные ссылки на отдельные файлы xcdatamodel из xcode (созданные в начале).

Извините за длинный ответ... но проблема решена: D

Ответ 4

Это все еще проблема в Xcode 8.

Для меня простым решением было перетащить (внутри панели навигации файла проекта - слева от Xcode) мой файл .xcdatamodeld из его (желтой) папки подгрупп до самого верхнего уровня в приложении (один с синим значком). После этого он немедленно открыл редактор.

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

Надеюсь, это поможет кому-то.

Ответ 5

Перезапуск Xcode обычно заботится об этой проблеме.

Ответ 6

Вот как я решил проблему:

  • В дереве файлов Xcode удален файл .xcdatamodeld.
  • Когда я открыл папку проекта, файл был там. (Xcode удалил ссылку только.)
  • Я перетащил его обратно в дерево файлов Xcode, отметьте "Скопируйте элементы, если необходимо". Он не сделал копию, потому что понял, что файл уже находится в папке проекта.

Проблема решена.

Ответ 7

При первом выборе это поведение происходит, но выбор другого класса, а затем обратно в dataModel позволяет редактировать для меня новый проект без CoreData, а затем добавить в проект модель coreData.

Просто мысль, вы добавили сущность или вы даже не можете получить доступ к представлению datamodel?

Ответ 8

Я решил это так в Xcode:

Щелкните правой кнопкой мыши свой проект (не ваша папка проекта, я имею в виду одну с синим значком Xcode!), чем выберите "Новый файл" и выберите правильный для сохранения модели данных.

Примечание. Щелчок "Новый файл" в самой папке проекта или в одной из его подпапок не работает каким-то образом.