Jak usunąć starą / nieużywaną wersję modelu danych w Xcode

163

Jak mogę usunąć stary model danych w Xcode? Ta opcja jest wyłączona w menu. (Modele, które chcę usunąć, nie zostały udostępnione publicznie - są to tymczasowe modele rozwojowe).

SAHM
źródło
Czy to znaczy, że opcja „Usuń” w menu „Edycja” jest wyłączona (podczas gdy stary plik modelu danych jest zaznaczony w Inspektorze plików)? A może masz na myśli coś zupełnie innego?
Michael Dautermann
Tak, opcja usuwania w menu Edycja, a także w menu kontrolnym prawym przyciskiem myszy (i każdym menu, które mogę znaleźć), jest wyłączona. Wiem, że niektórzy ludzie przechodzą do poprzedniego xcode, aby usunąć stare / nieużywane wersje, ale nie mam zainstalowanej żadnej.
SAHM
Michael, czy jesteś w stanie to zrobić w xCode 4?
SAHM,
tak ... Nigdy nie widziałem, żeby opcja menu „usuń” była wyłączona dla żadnego z moich projektów XCode 4.
Michael Dautermann
Oddzielnie dla xcdatamodel? Inni mieli ten sam problem z usunięciem xcdatamodels XCode 4 .. Po prostu nie widziałem opublikowanego rozwiązania.
SAHM

Odpowiedzi:

374

To hack, ale to zadziałało:

  1. Ustaw Bieżącą wersję modelu w Xcode na taką, którą chcesz zachować
  2. Usuń plik .xcdatamodeld z projektu (kliknij prawym przyciskiem myszy -> Usuń -> Usuń tylko odniesienie )
  3. Pokaż zawartość pakietu .xcdatamodeld w Finderze (kliknij prawym przyciskiem myszy -> Pokaż zawartość pakietu)
  4. Usuń pliki .xcdatamodel, których już nie potrzebujesz
  5. Ponownie dodaj plik .xcdatamodeld do projektu

Eliminuje to potrzebę ręcznego modyfikowania dowolnego pliku metadanych projektu.

David Avendasora
źródło
2
Wypróbowałem tę technikę i stwierdziłem, że ze względu na sposób, w jaki nazywane były moje wersje modelu, wersja modelu została ponownie posortowana nieprawidłowo i wybrano niewłaściwą wersję domyślną, gdy ponownie dodałem plik xcdatamodel do projektu. Może to być spowodowane tym, że mam do 38 wersji modeli i nie zmieniłem domyślnej nazwy wersji, więc wersje mają nazwę „MY_APP 37.xcdatamodel”. Chciałem usunąć 38. Podczas importu został on ściągnięty w porządku leksykalnym, co oznacza, że ​​„MY_APP 10.xcdatamodel” był pierwszy i wybrany jako domyślny. Nie jest idealny w moim przypadku.
Mike
1
Mike - dla mnie ten sam problem, chociaż udało mi się zmienić kolejność w project.pbxproj w edytorze tekstu bez większego dramatu. Nadal nie jest idealny.
Ian Kershaw
1
To nie działa z Xcode 5.1.1. Wcześniej, przy wielu drobnych zmianach modelu i zwiększonych numerach wersji modelu, lekka automatyczna migracja działała poprawnie. Jednak po próbie usunięcia wszystkich zbędnych modeli „tylko programistycznych” przy użyciu tego podejścia pojawia się błąd: „Błąd: nie można znaleźć lub automatycznie wywnioskować model mapowania do migracji”.
Dalmazio
1
w 6.4 nie ma możliwości usunięcia odniesień. Po prostu został usunięty. Reszta kroków wydawała się działać
noobsmcgoobs
1
Wygląda na to, że działa w Xcode 10.2.1. Moja migracja polegała na zmianie nazw atrybutów, więc nic poważnego.
Gavin
35

Właśnie znalazłem potrzebę, aby to zrobić. Stworzyłem nową wersję modelu, a potem zdałem sobie sprawę, że wcale jej nie potrzebuję. Zaskoczyło mnie, że nie ma sposobu na usunięcie go (który mogłem znaleźć) z Xcode. Mimo to, aby go usunąć, wykonałem następujące czynności:

Najpierw upewniłem się, że to nie jest moja obecna wersja modelu. Następnie poszedłem do Findera i znalazłem mój plik * .xcdatamodeld. Kliknij prawym przyciskiem myszy i Pokaż zawartość pakietu. Tam znajdziesz rzeczywisty plik modelu i możesz go usunąć.

To nadal nie usuwa go z Xcode i będzie wyświetlany na czerwono w plikach i grupach. Aby temu zapobiec, wróć do Findera i pokaż zawartość pakietu w głównym pliku * .xcodeproj (możesz najpierw upewnić się, że masz kopię zapasową tego). Tam otwórz i edytuj plik project.pbxproj, znajdź nazwę wersji swojego modelu, w moim przypadku "interwał 8". U mnie pojawił się w dwóch osobnych wierszach. Usunąłem te linie i teraz jest całkowicie usunięty z Xcode.

Daniel Wood
źródło
1
@Daniel_Wood, tak, odkryłem też, jak to zrobić ręcznie, ale uważaj. Może to powodować pewne problemy ... musiałem to powtórzyć kilka razy, kończy się to również czasami przełączaniem wersji aktywnej i nieaktywnej, a kiedy zresetujesz poprawną wersję, nie przenosi jej do na górze listy (czasami), co powoduje więcej problemów! Dziękuję bardzo za wkład. Wydaje się to dziwne, że usunęliby tę możliwość - nigdy nie MUSIMY wchodzić do pliku .xcodeproj!
SAHM,
2

To zadziałało dla mnie w XCode 10.3 bez problemu z kolejnością występującego podczas usuwania całego modelu i dodawania go ponownie:

  1. Wybierz dowolną wersję modelu inną niż ta, którą chcesz usunąć.
  2. W XCode kliknij prawym przyciskiem myszy plik .xcdatamodeld i wybierz „Pokaż w Finderze”.
  3. Zamknij XCode.
  4. W wyszukiwarce kliknij prawym przyciskiem myszy ten sam plik i wybierz „Pokaż zawartość pakietu”.
  5. Zapisz nazwę modelu, który chcesz usunąć, a następnie z Findera usuń go.
  6. Nadal w Finderze przejdź do pliku projektu (.xcodeproj).
  7. Kliknij prawym przyciskiem myszy i otwórz za pomocą Atom lub dowolnego innego edytora.
  8. W panelu „Projekt” otwórz plik project.pbxproj.
  9. Usuń wszystkie wiersze zawierające usuniętą nazwę modelu (przykład: „ABC 17.xcdatamodel”). Znajdziesz dwie linie podobne do następujących:

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * / = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = " ABC 17.xcdatamodel "; sourceTree = ""; };

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * /,

    Zauważ, że jeśli znajdziesz trzecią linię, będzie to coś takiego:

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

    Oznacza to, że jest to aktualnie wybrany model. Nigdy nie usuwaj tej linii. Po prostu zmień tekst na inną wersję modelu.

  10. Ponownie otwórz XCode.

Tony
źródło
-4

Moja odpowiedź wcale nie dotyczy konkretnego problemu, ale jest szybka i działa. Dla tych, którzy używają git. Możesz po prostu odrzucić zmiany niestacjonarne.

git stash save --keep-index

Następnie możesz upuścić tę skrytkę za pomocą git stash dropkomendy, jeśli chcesz.

RaffAl
źródło