Как удалить старую / неиспользуемую версию модели данных в XCode


163

Как я могу удалить старую модель данных в XCode? Опция отключена в меню. (Модели, которые я хочу удалить, не были опубликованы - они являются временными моделями разработки.)


Вы имеете в виду, что выбор «Удалить» в меню «Редактировать» отключен (когда ваш старый файл модели данных выбран в Инспекторе файлов)? Или вы имеете в виду что-то совсем другое?
Майкл Даутерманн

Да, выбор удаления в меню «Правка», а также в контекстном меню (и любом меню, которое я могу найти) отключен. Я знаю, что некоторые люди переходят на предыдущий xcode, чтобы удалить старые / неиспользуемые версии, но у меня не установлено ни одной.
SAHM

Майкл, ты можешь сделать это в xCode 4?
SAHM

да ... я никогда не видел, чтобы опция "удалить" в меню отключалась ни для одного из моих проектов XCode 4.
Майкл Даутерманн

Септицизм для xcdatamodel? У других была такая же проблема с удалением xcdatamodels XCode 4 .. Я просто не видел опубликованного решения.
SAHM

Ответы:


374

Это взлом, но это сработало для меня:

  1. Установите текущую версию модели в XCode к той, которую вы хотите сохранить
  2. Удалите .xcdatamodeld из вашего проекта (щелкните правой кнопкой мыши -> Удалить -> Удалить только ссылку )
  3. Показать содержимое пакета .xcdatamodeld в Finder (щелкните правой кнопкой мыши -> Показать содержимое пакета)
  4. Удалите файлы .xcdatamodel, которые вам больше не нужны
  5. Повторно добавьте файл .xcdatamodeld в свой проект

Это устраняет необходимость вручную изменять любые файлы метаданных проекта.


2
Я попробовал эту технику и обнаружил, что из-за того, как были названы версии моей модели, версия модели была неправильно отсортирована, и была выбрана неправильная версия по умолчанию, когда я повторно добавил файл xcdatamodel в проект. Это может быть связано с тем, что у меня до 38 версий моделей, и я не изменил имя версии по умолчанию, поэтому версии называются «MY_APP 37.xcdatamodel». Я хотел удалить 38. При импорте он вытягивался в лексическом порядке, означая, что «MY_APP 10.xcdatamodel» был первым и выбран по умолчанию. Не идеально в моем случае.
Майк

1
Майк - та же проблема для меня, хотя мне удалось изменить порядок в project.pbxproj в текстовом редакторе без какой-либо серьезной драмы. Все еще не идеал.
Ян Кершоу

1
Это не работает с Xcode 5.1.1. Ранее, с небольшими изменениями модели и увеличением номеров версий модели, облегченная автоматическая миграция работала правильно. Однако после попытки удалить все посторонние модели «только для разработки», используя этот подход, я получаю сообщение об ошибке: «Ошибка: не удается найти или автоматически определить модель сопоставления для миграции».
Далмацио,

1
в 6.4 нет возможности удалить ссылки. Это просто было удалено. Остальные шаги, казалось, работали
noobsmcgoobs

1
Это похоже на работу в Xcode 10.2.1. В моей миграции произошли некоторые изменения имени атрибута, поэтому ничего особенного.
Гэвин

35

Я только что нашел необходимость сделать это. Я создал новую версию модели и понял, что она мне больше не нужна. Я был удивлен, обнаружив, что не было никакого способа удалить его (что я мог найти) из Xcode. Тем не менее, чтобы удалить его, я сделал следующее:

Сначала я убедился, что это не моя текущая модель. Затем я пошел в Finder и нашел свой файл * .xcdatamodeld. Щелкните правой кнопкой мыши и покажите содержимое пакета на этом. Там вы найдете актуальный файл модели и можете удалить его.

Это все еще не удаляет это из XCode, и это покажет красный в Файлах и Группах. Чтобы этого не происходило, вернитесь в Finder и покажите содержимое пакета в вашем основном файле * .xcodeproj (вы можете сначала убедиться, что у вас есть резервная копия). Там откройте и отредактируйте project.pbxproj и найдите название вашей модели, в моем случае «интервал 8». Для меня это появилось на двух отдельных строчках. Я удалил эти строки, и теперь он полностью удален из Xcode.


1
@Daniel_Wood, да, я тоже нашел, как это сделать вручную, но будьте осторожны. Это может вызвать некоторые проблемы в будущем ... Мне пришлось делать это несколько раз, это также иногда приводит к переключению активной и неактивной версий, а затем, когда вы сбрасываете правильную версию, она не перемещается в верхняя часть списка (иногда), которая вызывает больше проблем! Большое спасибо за вклад, хотя. Это кажется странным, что они удалили бы эту возможность - мы никогда не должны идти в файл .xcodeproj!
SAHM

2

Это работало для меня в XCode 10.3 без проблем с упорядочением, возникающих при удалении всей модели и добавлении ее снова:

  1. Выберите любую версию модели, кроме той, которую вы хотите удалить.
  2. В XCode щелкните правой кнопкой мыши файл .xcdatamodeld и выберите «Показать в Finder».
  3. Закройте XCode.
  4. В Finder щелкните правой кнопкой тот же файл и выберите «Показать содержимое пакета».
  5. Запишите название модели, которую вы хотите удалить, затем из Finder удалите ее.
  6. Все еще в Finder, перейдите к файлу проекта (.xcodeproj).
  7. Щелкните правой кнопкой мыши и откройте с помощью Atom или любого другого редактора.
  8. На панели «Проект» откройте файл project.pbxproj.
  9. Удалите все строки, содержащие название модели, которую вы удалили (Пример: «ABC 17.xcdatamodel»). Вы найдете две строки, похожие на следующее:

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * / = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; путь = " ABC 17.xcdatamodel "; sourceTree = ""; };

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * /,

    Обратите внимание, если вы найдете третью строку, это будет что-то вроде:

    currentVersion = 9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * /;

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

  10. Снова откройте XCode.


-4

Мой ответ совсем не конкретный, но быстрый и работает. Для тех, кто использует git. Вы можете просто отменить внесенные изменения.

git stash save --keep-index

Тогда вы можете сбросить этот тайник с помощью git stash dropкоманды, если хотите.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.