Як видалити стару / невикористану версію моделі даних у 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. Клацніть правою кнопкою миші той самий файл у пошуку, а потім виберіть "Показати зміст пакета".
  5. Запишіть назву моделі, яку ви хочете зняти, а потім з Finder видаліть її.
  6. Перебуваючи у Finder, перейдіть до файлу проекту (.xcodeproj).
  7. Клацніть правою кнопкою миші та відкрийте її за допомогою Atom або будь-якого іншого редактора.
  8. На панелі "Проект" відкрийте файл project.pbxproj.
  9. Видаліть усі рядки, що містять назву моделі, яку ви видалили (Приклад: "ABC 17.xcdatamodel"). Ви знайдете два рядки, подібні до наступного:

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * / = {isa = PBXFileReference; lastK knownFileType = wrapper.xcdatamodel; path = " 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.