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, если исходный проект не был создан с помощью "Использовать основные данные".
Кто-нибудь испытал эту проблему, смогли ли вы ее исправить и как?
Спасибо!
Ответы
Ответ 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 */
- Переместите эти строки из раздела
PBXBuildFile
в начало PBXFileReference
и обновите их следующим образом (повторно используйте fileId
).
Пример:
75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MyProject 2.xcdatamodel"; sourceTree = "<group>"; };
- Теперь найдите файл
MyPoject.xcdatamodeld
в разделе PBXBuildFile
и скопируйте его fileRef
.
Пример:
75F319961B9D7FA50030FF46 /* MyProject.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */; };
// fileRef = 75F319931B9D7FA50030FF46
- Наконец, в самом конце файла
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 */
- Теперь вы можете теперь открыть файл xcdatamodel d в Xcode из нужной подпапки.
- Теперь удалите дополнительные ссылки на отдельные файлы xcdatamodel из xcode (созданные в начале).
Извините за длинный ответ... но проблема решена: D
Ответ 4
Это все еще проблема в Xcode 8.
Для меня простым решением было перетащить (внутри панели навигации файла проекта - слева от Xcode) мой файл .xcdatamodeld из его (желтой) папки подгрупп до самого верхнего уровня в приложении (один с синим значком).
После этого он немедленно открыл редактор.
Я повторно протестировал его, перетащив его обратно в подгруппу, и снова он не откроется в редакторе, а затем вернется на верхний уровень и откроется правильно...
Я понятия не имею, почему это происходит, но по крайней мере я могу редактировать его снова.
Надеюсь, это поможет кому-то.
Ответ 5
Перезапуск Xcode обычно заботится об этой проблеме.
Ответ 6
Вот как я решил проблему:
- В дереве файлов Xcode удален файл .xcdatamodeld.
- Когда я открыл папку проекта, файл был там. (Xcode удалил ссылку только.)
- Я перетащил его обратно в дерево файлов Xcode, отметьте "Скопируйте элементы, если необходимо". Он не сделал копию, потому что понял, что файл уже находится в папке проекта.
Проблема решена.
Ответ 7
При первом выборе это поведение происходит, но выбор другого класса, а затем обратно в dataModel позволяет редактировать для меня новый проект без CoreData, а затем добавить в проект модель coreData.
Просто мысль, вы добавили сущность или вы даже не можете получить доступ к представлению datamodel?
Ответ 8
Я решил это так в Xcode:
Щелкните правой кнопкой мыши свой проект (не ваша папка проекта, я имею в виду одну с синим значком Xcode!), чем выберите "Новый файл" и выберите правильный для сохранения модели данных.
Примечание. Щелчок "Новый файл" в самой папке проекта или в одной из его подпапок не работает каким-то образом.