Saya membuat model Data Inti dalam xcode 3.2 dan setelah memutakhirkan di Xcode 4.2, saya kemudian menambahkan entitas baru dari subclass NSManagedObject (lihat entitas baru).
Hal pertama, itu terlihat aneh karena tidak berada dalam kelompok yang sama dengan yang lama. Berikut adalah gambar pada xcode saya 4.2 (AlkitabDB adalah yang saya buat di xcode 3.2, EndeDB adalah yang baru dari versi xcode saat ini (4.2):
Hal kedua, saya membiarkannya apa adanya, lalu saya mengakses entitas kedua (yang baru) dengan cara yang sama dengan entitas pertama (yang lama), dan kesalahan seperti berjudul muncul.
Inilah kesalahannya:
2012-01-16 21:13:38.496 iHuria[55953:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x8829cd0 {metadata=<CFBasicHash 0x882a370 [0x1839b38]>{type = immutable dict, count = 7,
entries =>
2 : <CFString 0x8829b90 [0x1839b38]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x8829ff0 [0x1839b38]>{type = immutable, count = 0, values = ()}
4 : <CFString 0x8829bc0 [0x1839b38]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x8829770 [0x1839b38]>{value = +320, type = kCFNumberSInt64Type}
6 : <CFString 0x8829bf0 [0x1839b38]>{contents = "NSStoreModelVersionHashes"} = <CFBasicHash 0x882a080 [0x1839b38]>{type = immutable dict, count = 1,
entries =>
0 : <CFString 0x882a010 [0x1839b38]>{contents = "AlkitabDB"} = <CFData 0x882a030 [0x1839b38]>{length = 32, capacity = 32, bytes = 0xd02ac5f8be6ab0b39add450aca202ac0 ... 3d45d462998d2ccd}
}
7 : <CFString 0x10e3aa8 [0x1839b38]>{contents = "NSStoreUUID"} = <CFString 0x8829e60 [0x1839b38]>{contents = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59"}
8 : <CFString 0x10e3948 [0x1839b38]>{contents = "NSStoreType"} = <CFString 0x10e3958 [0x1839b38]>{contents = "SQLite"}
9 : <CFString 0x8829c40 [0x1839b38]>{contents = "NSStoreModelVersionHashesVersion"} = <CFNumber 0x6b1c7c0 [0x1839b38]>{value = +3, type = kCFNumberSInt32Type}
10 : <CFString 0x8829c70 [0x1839b38]>{contents = "_NSAutoVacuumLevel"} = <CFString 0x882a0c0 [0x1839b38]>{contents = "2"}
}
, reason=The model used to open the store is incompatible with the one used to create the store}, {
metadata = {
NSPersistenceFrameworkVersion = 320;
NSStoreModelVersionHashes = {
AlkitabDB = <d02ac5f8 be6ab0b3 9add450a ca202ac0 ebd1e860 cbb578c2 3d45d462 998d2ccd>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
);
NSStoreType = SQLite;
NSStoreUUID = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59";
"_NSAutoVacuumLevel" = 2;
};
reason = "The model used to open the store is incompatible with the one used to create the store";
}
Saya mencari solusi sebelumnya dan menemukan bahwa saya harus menghapus aplikasi dari simulator dan menjalankan kembali aplikasi, dan itu tidak berhasil. Adakah yang tahu solusi untuk masalah ini? Tolong bantu.
let options = [ NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption:true ]
Hapus aplikasi dari simulator dan lakukan pembersihan pada proyek Anda. Itu harus membersihkan masalah-masalah itu. Pastikan Anda tidak menjalankan debugger ketika Anda menghapus aplikasi atau yang lain itu tidak akan benar-benar menghapusnya.
Jika Anda ingin memastikan itu hilang, periksa direktori ini
Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/
untuk folder aplikasi Anda, di bawah versi yang Anda jalankan.Catatan: Ini hanya untuk pengembangan. Untuk produksi, Anda perlu menerapkan semacam migrasi. Google "Migrasi Data Inti", dengan migrasi ringan menjadi yang paling sederhana.
sumber
Cukup tambahkan atribut Opsi sambil membuat persistentStoreCoordinator di file AppDelegate.m untuk metode data inti seperti di bawah ini
TUJUAN-C
CEPAT
Itu telah memecahkan masalah saya ..
sumber
Jawaban: Hapus aplikasi dari Simulator, Lakukan Bersih dan Bangun Kembali Proyek Anda.
Catatan: Setiap kali Anda melakukan perubahan pada definisi Data Inti, Hapus aplikasi yang diinstal pada Perangkat Fisik atau Simulator, Bersihkan Proyek dan Bangun Kembali.
sumber
Iya. Setelah Anda menghapus aplikasi pada perangkat fisik dan membangunnya kembali berfungsi.
sumber
Untuk cepat, di AppDelegate.swift temukan baris
dan ganti dengan
sumber
Saya hanya menghabiskan waktu beberapa hari untuk mengatasi kesalahan ini, dan juga kesalahan mergerModelFromBundles, dan mendapatkan kesalahan "Tidak dapat menggabungkan model dengan dua entitas berbeda bernama *".
Ternyata masalah root adalah Xcode tidak menghapus sumber daya lama dari perangkat dan saya memiliki versi lama model data saya (file .mom) yang menyebabkan konflik. Inilah sebabnya mengapa menghapus aplikasi memperbaiki masalah di salah satu perangkat saya.
Setelah menemukan posting blog ini melalui jawaban SO lainnya, saya membuat aplikasi saya lebih toleran terhadap model lama dengan mengubah baris ini yang mencari SEMUA file .mom:
untuk ini, yang hanya terlihat di direktori Filter:
Saya menggunakan recursivePathsForResourcesOfType dari pertanyaan ini : untuk membantu memecahkan masalah ini dengan masuk ke semua file .mom di aplikasi:
Saya juga menggunakan iExplorer untuk melihat file .mom yang asing (saya belum mencoba menghapusnya).
Metode di bawah ini juga bermanfaat. Ini menunjukkan bahwa suatu entitas berada dalam model gabungan yang dikembalikan oleh [psc managedObjectModel] yang tidak ada lagi di salah satu model saya atau di toko itu sendiri. Inilah yang membuat saya percaya bahwa model lama sedang di-cache pada perangkat itu sendiri bahwa bangunan bersih tidak dihapus. Metode mencatat setiap entitas yang sama, telah diubah, atau ditambahkan, atau dihapus dari model. (ditulis dengan jawaban SO ini sebagai titik awal):
penggunaan: dipanggil sebelum menambahkan setiap toko ke NSPersistentStoreCoordinator:
sumber
Setiap kali Anda membuat perubahan ke definisi Tanggal Inti, Anda harus menghapus aplikasi yang diinstal pada perangkat fisik atau simulator.
sumber
Product
->Clean
sumber
Solusi paling sederhana yang bekerja untuk saya di Swift 2.1, Xcode 7 adalah:
Hapus aplikasi dari Simulator (Cmd + Shift + H untuk membuka Layar Beranda. Tekan lama aplikasi, Klik silang, seperti cara biasa Anda menghapus aplikasi dari telepon Anda)
Cmd + Shift + H lagi untuk menghentikan dansa aplikasi
Kembali ke proyek Anda dan jalankan kembali
Saya mengalami masalah ini saat menulis / membaca dari Core Data dengan 2 entitas yang diatur. Menghapus aplikasi dan menjalankan kembali program memperbaiki masalah
sumber
Saya baru saja menghapus
[Simulator App Folder]/Document/*.sqlite
file setelah membuat perubahan pada entitas dan itu berhasil. Dan tentu saja, file .sqlite berisi semua data yang tersimpan dan struktur yang akan hilang.sumber
Silakan Hapus aplikasi dari simulator dan bersihkan kode dan jalankan. Itu berfungsi dengan baik. Lakukan itu mungkin membantu ANDA.
sumber
Jika Anda menggunakan Swift.
Ikuti jawaban dengan @Stas dan masukkan opsi, sebagai ganti nol, di Delegasi Aplikasi Anda:
sumber
Coba "Setel Ulang Konten & Pengaturan" di simulator. Bekerja untuk saya setelah menghapus aplikasi dan Clean build
sumber
Saya mengalami masalah yang sama dengan aplikasi saya (belum dirilis di App Store).
Begini cara saya memperbaikinya:
(3) adalah langkah yang akhirnya membuatnya berjalan dengan baik. Semoga ini membantu!
sumber
Meskipun kadang-kadang Anda hanya dapat menghapus aplikasi dari perangkat ketika mengubah skema dalam model objek yang dikelola, dalam beberapa skenario ini tidak mungkin misalnya karena Anda sudah menerbitkan aplikasi Anda dengan skema lama.
Jika ini masalahnya, Anda harus mengurus migrasi data lama ke skema baru:
Versi Inti Model Data dan Migrasi Data
sumber
Anda harus memigrasi model Data Inti menggunakan migrasi. Setiap kali Anda mengubah model, Anda membuatnya tidak kompatibel tanpa versi. Mengikat diri Anda, ini adalah topik yang sedikit berbulu.
http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html
sumber
Jika Anda membuat perubahan pada model Data Inti Anda, Anda harus memberikan kebijakan migrasi yang memberi tahu Data Inti cara mengadopsi objek yang ada yang sudah ada (yang dibuat pengguna Anda dengan versi yang saat ini dirilis) ke model baru.
Untuk beberapa skenario, Data Inti dapat secara otomatis menyimpulkan pemetaan dari model lama ke yang baru. Untuk perubahan yang lebih kompleks, Anda mungkin harus menerapkan beberapa logika yang melakukan migrasi.
Detail dapat ditemukan di Panduan Pemodelan Model Data Inti dan Migrasi Pemrograman Data .
Perbarui
Jawaban ini di Stack Overflow yang mencakup dasar-dasar migrasi ringan Core Data dan juga memiliki beberapa kode untuk Anda mulai.
sumber
Masalah ini umumnya terjadi karena ketidakcocokan antara versi tempat DB dibuat. Pendekatan umum untuk masalah ini adalah menghapus aplikasi dan menginstalnya kembali. Tetapi dalam kasus Anda yang disebutkan versi DB benar-benar berbeda pada Xcode 3.2 dan 4.2. Jadi lebih baik gunakan versi Xcode yang sama untuk DB.
sumber
Pertama, satu-satunya hal yang harus ada dalam
xcdatamodeld
bundel adalahxcdatamodel
file. Subkelas Anda TIDAK boleh berada dixcdatamodeld
. Pindahkan mereka dari sana. Ada kemungkinan mereka membingungkan kompiler.Kedua, kesalahan menunjukkan bahwa Data Inti tidak dapat menemukan model Anda. Sudahkah Anda membuat data dan kemudian menyentuh model? Jika demikian, Anda berada dalam kondisi tidak konsisten dan perlu memperbaikinya dengan menghapus data (yang disarankan Philippe) atau dengan menggulirkan perubahan model BACK .
sumber
xcdatamodel
file harus ada di sana. File .h dan .m yang perlu dipindahkan. Gunakan Finder.Saya mendapatkan kesalahan tetapi alasan saya mendapatkan kesalahan adalah karena hal berikut.
Saya awalnya memiliki satu Entitas bernama "Entri" dan satu baris disimpan untuk entitas itu dalam database. Saya kemudian menambahkan Entitas lain bernama "Orang" dan setelah menambahkan itu pergi untuk membangun dan mendapat kesalahan. Jadi saya memecahkan masalah dengan menghapus Entitas "Orang" dan kemudian membangun aplikasi, menghapus baris yang ada di "Entri" dan kemudian menutup aplikasi. Saya kemudian menghapus aplikasi sepenuhnya dari ponsel saya dan kemudian melakukan pembangunan kembali dan berfungsi dengan baik. Tidak yakin langkah mana yang memperbaiki masalah (penghapusan baris atau aplikasi), tetapi mudah-mudahan jika Anda mencari solusi, ini akan membantu. :)
Sunting: Oh dan jika Anda khawatir menghapus Entity baru Anda (dalam kasus saya "Person") untuk membangun aplikasi lagi ingat Anda bisa mendapatkannya kembali setelah itu dengan menggunakan CMD + Z!
sumber
Saya punya masalah ini - saya pertama-tama mengatur ulang simulator saya dan kemudian membersihkan proyek dan membangun kembali. Dan kemudian berhasil.
sumber
Ketika Anda mengubah data inti, (menambahkan bidang ke tabel, menghapus bidang dll), file sqlite dalam folder dokumen aplikasi harus disinkronkan dengan skema Anda.
File ini tidak ditimpa secara default, file ini perlu dibuat ulang.
Ikuti langkah ini:
Buka folder yang ditunjuk oleh NSURL. (Jalur ini dapat ditemukan dalam pesan pengecualian yang dihasilkan oleh aplikasi sebelum mogok.) Contoh: / Pengguna // Dukungan Perpustakaan / Aplikasi / iPhone Simulator // Aplikasi // Dokumen
menghapus atau mengganti nama file sqlite
Ini akan memastikan bahwa skema dan Xcode sinkron.
sumber
Untuk pengembangan aplikasi mac:
Ini bekerja untuk saya, semoga ini bisa membantu.
sumber
Simulator iOS -> Setel Ulang Konten dan Pengaturan ...
Bekerja untukku
iOS Simulator -> Reset Konten dan Pengaturan ... -> Reset Bekerja pada iOS9 (xcode 7.1) juga
sumber