So löschen Sie eine alte / nicht verwendete Datenmodellversion in Xcode

163

Wie kann ich ein altes Datenmodell in Xcode löschen? Die Option ist im Menü deaktiviert. (Die Modelle, die ich löschen möchte, wurden nicht veröffentlicht - es handelt sich um vorläufige Entwicklungsmodelle.)

SAHM
quelle
Meinen Sie damit, dass die Auswahl "Löschen" im Menü "Bearbeiten" deaktiviert ist (während Ihre alte Datenmodelldatei im Dateiinspektor ausgewählt ist)? Oder meinst du etwas ganz anderes?
Michael Dautermann
Ja, die Löschoption im Menü Bearbeiten und auch im Kontext-Rechtsklick-Menü (und in jedem Menü, das ich finden kann) ist deaktiviert. Ich weiß, dass einige Leute zu einem früheren xcode gehen, um alte / nicht verwendete Versionen zu löschen, aber ich habe keine installiert.
SAHM
Michael, kannst du das in xCode 4?
SAHM
Ja ... Ich habe noch nie gesehen, dass die Menüoption "Löschen" für eines meiner XCode 4-Projekte deaktiviert ist.
Michael Dautermann
Speziell für das xcdatamodel? Andere hatten das gleiche Problem beim Löschen von xcdatamodels XCode 4. Ich habe gerade keine Lösung gesehen.
SAHM

Antworten:

374

Es ist ein Hack, aber das hat bei mir funktioniert:

  1. Stellen Sie die aktuelle Version des Modells in Xcode auf eine ein, die Sie behalten möchten
  2. Entfernen Sie die .xcdatamodeld aus Ihrem Projekt (Rechtsklick -> Löschen -> Nur Referenz entfernen )
  3. Zeigen Sie den Inhalt des .xcdatamodeld-Pakets im Finder an (Rechtsklick -> Paketinhalt anzeigen)
  4. Löschen Sie die .xcdatamodel-Datei (en), die Sie nicht mehr möchten
  5. Fügen Sie die .xcdatamodeld-Datei erneut zu Ihrem Projekt hinzu

Dadurch müssen die Projektmetadatendateien nicht mehr manuell geändert werden.

David Avendasora
quelle
2
Ich habe diese Technik ausprobiert und festgestellt, dass aufgrund der Art und Weise, wie meine Modellversionen benannt wurden, die Modellversion nicht ordnungsgemäß neu sortiert wurde und die falsche Standardversion ausgewählt wurde, als ich die xcdatamodel-Datei erneut in das Projekt einfügte. Dies kann daran liegen, dass ich bis zu 38 Modellversionen habe und den Standardversionsnamen nicht geändert habe. Daher heißen die Versionen "MY_APP 37.xcdatamodel". Ich wollte 38 löschen. Beim Import wurde es in lexikalischer Reihenfolge abgerufen, was bedeutet, dass "MY_APP 10.xcdatamodel" zuerst war und als Standard ausgewählt wurde. In meinem Fall nicht ideal.
Mike
1
Mike - das gleiche Problem für mich, obwohl ich in der Lage war, die Datei project.pbxproj in einem Texteditor ohne größeres Drama neu zu ordnen. Immer noch nicht ideal.
Ian Kershaw
1
Dies funktioniert nicht mit Xcode 5.1.1. Bisher funktionierte die einfache automatische Migration mit vielen kleinen Modelländerungen und inkrementierten Modellversionsnummern ordnungsgemäß. Nachdem ich jedoch versucht habe, alle überflüssigen "Nur-Entwicklung" -Modelle mit diesem Ansatz zu entfernen, wird der Fehler angezeigt: "Fehler: Zuordnungsmodell für Migration kann nicht gefunden oder automatisch abgeleitet werden".
Dalmazio
1
In 6.4 gibt es keine Möglichkeit, Referenzen zu entfernen. Es wurde gerade gelöscht. Der Rest der Schritte schien zu funktionieren
noobsmcgoobs
1
Dies scheint in Xcode 10.2.1 zu funktionieren. Meine Migration war einige Änderungen des Attributnamens, also nichts Wichtiges.
Gavin
35

Ich habe gerade die Notwendigkeit gefunden, dies zu tun. Ich habe eine neue Modellversion erstellt und dann festgestellt, dass ich sie doch nicht brauchte. Ich war überrascht, dass es keine Möglichkeit gab, es (das ich finden konnte) aus Xcode zu löschen. Um es zu entfernen, habe ich dennoch Folgendes getan:

Zuerst habe ich sichergestellt, dass es nicht meine aktuelle Modellversion ist. Dann ging ich zum Finder und fand meine * .xcdatamodeld-Datei. Klicken Sie mit der rechten Maustaste und zeigen Sie den Paketinhalt darauf an. Dort finden Sie die eigentliche Modelldatei und können diese löschen.

Dadurch wird es immer noch nicht aus Xcode entfernt und in den Dateien und Gruppen wird es rot angezeigt. Um dies zu verhindern, kehren Sie zu Finder zurück und zeigen Sie den Paketinhalt in Ihrer Hauptdatei * .xcodeproj an (möglicherweise möchten Sie zuerst sicherstellen, dass Sie eine Sicherungskopie davon haben). Öffnen und bearbeiten Sie dort project.pbxproj und suchen Sie nach Ihrem Modellversionsnamen, in meinem Fall "Intervall 8". Für mich erschien es in zwei getrennten Zeilen. Ich habe diese Zeilen entfernt und jetzt ist es vollständig aus Xcode entfernt.

Daniel Wood
quelle
1
@ Daniel_Wood, ja, ich hatte herausgefunden, wie man es auch manuell macht, aber pass auf. Es kann später zu Problemen führen ... Ich musste dies mehrmals wiederholen. Manchmal werden auch die aktiven und nicht aktiven Versionen umgeschaltet. Wenn Sie dann die richtige Version zurücksetzen, wird sie nicht verschoben ganz oben auf der Liste (manchmal), was mehr Probleme verursacht! Vielen Dank für die Eingabe. Das scheint bizarr, dass sie diese Funktion entfernt hätten - wir sollten niemals in die .xcodeproj-Datei gehen MÜSSEN!
SAHM
2

Dies funktionierte bei mir in XCode 10.3, ohne dass beim Entfernen und erneuten Hinzufügen des gesamten Modells ein Bestellproblem auftrat:

  1. Wählen Sie eine andere Modellversion als die, die Sie löschen möchten.
  2. Klicken Sie in XCode mit der rechten Maustaste auf die Datei .xcdatamodeld und wählen Sie "Im Finder anzeigen".
  3. Schließen Sie XCode.
  4. Klicken Sie im Finder mit der rechten Maustaste auf dieselbe Datei und wählen Sie "Paketinhalt anzeigen".
  5. Notieren Sie sich den Namen des Modells, das Sie entfernen möchten, und löschen Sie es dann im Finder.
  6. Navigieren Sie im Finder zur Projektdatei (.xcodeproj).
  7. Klicken Sie mit der rechten Maustaste und öffnen Sie mit Atom oder einem anderen Editor.
  8. Öffnen Sie im Bereich 'Projekt' die Datei project.pbxproj.
  9. Entfernen Sie alle Zeilen, die den Modellnamen enthalten, den Sie entfernt haben (Beispiel: "ABC 17.xcdatamodel"). Sie finden zwei Zeilen ähnlich den folgenden:

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

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * /,

    Beachten Sie, wenn Sie eine dritte Zeile finden, ist dies ungefähr so:

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

    Das heißt, es ist das aktuell ausgewählte Modell. Löschen Sie niemals diese Zeile. Ändern Sie einfach den Text in eine andere Modellversion.

  10. Öffnen Sie den XCode erneut.

Tony
quelle
-4

Meine Antwort ist überhaupt nicht themenspezifisch, aber sie ist schnell und funktioniert. Für diejenigen, die Git verwenden. Sie können nicht bereitgestellte Änderungen einfach verwerfen.

git stash save --keep-index

Dann können Sie diesen Stash mit einem git stash dropBefehl löschen, wenn Sie möchten.

RaffAl
quelle