Cara menghapus Versi Model Data lama / tidak terpakai dalam Xcode

163

Bagaimana saya bisa menghapus Model Data lama di Xcode? Opsi ini dinonaktifkan pada menu. (Model yang ingin saya hapus belum dirilis ke publik - mereka adalah model pengembangan sementara.)

SAHM
sumber
Apakah maksud Anda pilihan "Hapus" di bawah menu "Edit" dinonaktifkan (sementara file Model Data lama Anda dipilih di inspektur File)? Atau maksud Anda sesuatu yang lain sama sekali?
Michael Dautermann
Ya, pilihan hapus di bawah menu Edit, dan juga di bawah menu klik kanan kontrol (dan menu apa pun yang dapat saya temukan) dinonaktifkan. Saya tahu beberapa orang akan pergi ke xcode sebelumnya untuk menghapus versi lama / tidak terpakai, tetapi saya belum menginstalnya.
SAHM
Michael, apakah Anda dapat melakukan ini di xCode 4?
SAHM
ya ... Saya belum pernah melihat opsi menu "delete" dinonaktifkan untuk proyek XCode 4 saya.
Michael Dautermann
Sepcifically untuk xcdatamodel? Yang lain memiliki masalah yang sama dengan menghapus xcdatamodels XCode 4 .. Saya hanya belum melihat solusi yang diposting.
SAHM

Jawaban:

374

Ini peretasan, tapi ini berhasil bagi saya:

  1. Atur versi model saat ini dalam Xcode ke salah satu yang ingin Anda pertahankan
  2. Hapus .xcdatamodeld dari proyek Anda (Klik kanan -> Hapus -> Hapus Referensi Saja )
  3. Tampilkan konten paket .xcdatamodeld di Finder (Klik kanan -> Tampilkan Konten Paket)
  4. Hapus file .xcdatamodel yang tidak Anda inginkan lagi
  5. Tambahkan kembali file .xcdatamodeld ke proyek Anda

Ini menghilangkan kebutuhan untuk secara manual memodifikasi file metadata proyek.

David Avendasora
sumber
2
Saya mencoba teknik ini dan menemukan bahwa karena cara versi model saya dinamai, versi model disortir ulang secara tidak tepat dan versi default yang salah dipilih ketika saya menambahkan kembali file xcdatamodel ke dalam proyek. Ini mungkin karena saya versi model hingga 38 dan saya belum mengubah nama versi default, sehingga versi bernama "MY_APP 37.xcdatamodel". Saya ingin menghapus 38. Pada impor, itu ditarik dalam urutan leksikal, yang berarti "MY_APP 10.xcdatamodel" pertama kali, dan dipilih sebagai default. Tidak ideal dalam kasus saya.
Mike
1
Mike - masalah yang sama bagi saya, meskipun saya bisa memesan ulang di project.pbxproj dalam editor teks tanpa drama besar. Masih belum ideal.
Ian Kershaw
1
Ini tidak berfungsi dengan Xcode 5.1.1. Sebelumnya, dengan banyak perubahan model kecil dan penambahan nomor versi model, migrasi otomatis ringan berfungsi dengan benar. Namun, setelah mencoba menghapus semua model "hanya pengembangan" yang tidak menggunakan menggunakan pendekatan ini, saya mendapatkan kesalahan: "Kesalahan: Tidak dapat menemukan atau secara otomatis menyimpulkan model pemetaan untuk migrasi".
Dalmazio
1
pada 6.4 tidak ada opsi untuk menghapus referensi. Itu baru saja dihapus. Sisa langkah tampaknya berhasil
noobsmcgoobs 4-15
1
Tampaknya ini berfungsi di Xcode 10.2.1. Migrasi saya adalah beberapa perubahan nama atribut sehingga tidak ada yang besar.
Gavin
35

Saya baru saja menemukan kebutuhan untuk melakukan ini. Saya membuat versi model baru kemudian menyadari bahwa saya tidak membutuhkannya. Saya terkejut menemukan tidak ada cara untuk menghapusnya (yang dapat saya temukan) dari Xcode. Namun, untuk menghapusnya saya melakukan yang berikut:

Pertama saya memastikan itu bukan versi model saya saat ini. Kemudian saya pergi ke Finder dan menemukan file * .xcdatamodeld saya. Klik kanan dan Tampilkan Isi Paket untuk itu. Di sana Anda akan menemukan file model aktual dan dapat menghapusnya.

Ini masih tidak menghapusnya dari Xcode dan itu akan ditampilkan merah di File dan Grup. Untuk menghentikan hal ini, kembalilah ke Finder dan Tampilkan Konten Paket pada file * .xcodeproj utama Anda (Anda mungkin ingin memastikan Anda memiliki cadangan ini terlebih dahulu). Di sana buka dan edit project.pbxproj lakukan pencarian pada nama versi model Anda, dalam kasus saya "interval 8". Bagi saya itu muncul pada dua baris terpisah. Saya menghapus garis-garis ini dan sekarang sepenuhnya dihapus dari Xcode.

Daniel Wood
sumber
1
@Daniel_Wood, ya, saya telah menemukan cara melakukannya secara manual juga, tapi hati-hati. Ini dapat menyebabkan beberapa masalah di telepon ... Saya harus melakukan ini beberapa kali, itu juga berakhir dengan beralih versi aktif dan non-aktif di sekitar kadang-kadang, maka ketika Anda mengatur ulang versi yang benar, itu tidak memindahkannya ke bagian atas daftar (kadang-kadang) yang menyebabkan lebih banyak masalah! Terima kasih banyak atas masukannya. Ini tampaknya aneh bahwa mereka akan menghapus kemampuan ini - kita seharusnya tidak HARUS masuk ke file .xcodeproj!
SAHM
2

Ini bekerja untuk saya di XCode 10.3 tanpa masalah pemesanan yang terjadi ketika menghapus seluruh model dan menambahkannya lagi:

  1. Pilih versi model apa pun selain yang ingin Anda hapus.
  2. Dari XCode, klik kanan file .xcdatamodeld dan pilih 'Show in Finder'.
  3. Tutup XCode.
  4. Di finder, klik kanan file yang sama dan pilih 'Tampilkan Isi Paket'.
  5. Tuliskan nama model yang ingin Anda hapus, lalu dari Finder, hapus itu.
  6. Masih di Finder, navigasikan ke file proyek (.xcodeproj).
  7. Klik kanan dan buka dengan Atom atau editor lainnya.
  8. Dari panel 'Project' buka file project.pbxproj.
  9. Hapus semua baris yang berisi nama model yang Anda hapus (Contoh: "ABC 17.xcdatamodel"). Anda akan menemukan dua baris yang mirip dengan yang berikut:

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

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * /,

    Perhatikan jika Anda menemukan baris ketiga itu akan menjadi seperti:

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

    Itu artinya model yang dipilih saat ini. Jangan pernah menghapus baris ini. Ubah saja teks ke versi model lain.

  10. Buka kembali XCode.

Tony
sumber
-4

Jawaban saya sama sekali tidak spesifik masalah tetapi cepat dan berfungsi. Bagi yang menggunakan git. Anda bisa membuang perubahan yang tidak dipentaskan.

git stash save --keep-index

Maka Anda bisa menjatuhkan simpanan itu dengan git stash dropperintah jika Anda mau.

RaffAl
sumber