Telah mengalami crack pertama saya di Core Data dan saya mendapatkan kesalahan berikut saat menjalankan kode saya di perangkat saya, tetapi berfungsi dengan baik di simulator ..
* Menghentikan aplikasi karena pengecualian yang tidak tertangkap 'NSInvalidArgumentException', alasan: 'Tidak dapat membuat NSPersistentStoreCoordinator dengan model nihil'
Beberapa metode saya yang mungkin menyebabkan masalah:
- (NSManagedObjectContext *)managedObjectContext
{
if (__managedObjectContext != nil)
{
return __managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}
/**
Returns the managed object model for the application.
If the model doesn't already exist, it is created from the application's model.
*/
- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil)
{
return __managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"RugbyOnTv" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return __managedObjectModel;
}
/**
Returns the persistent store coordinator for the application.
If the coordinator doesn't already exist, it is created and the application's store added to it.
*/
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil)
{
return __persistentStoreCoordinator;
}
NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"RugbyOnTV.sqlite"];
NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __persistentStoreCoordinator;
}
- (NSString *)applicationDocumentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
return basePath;
}
EDIT
Saya menyalin dan menempelkan metode managedObjectContext (di bawah) dari CoreDataBooks Apple dan sekarang berfungsi..Tidak begitu yakin mengapa
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}
objective-c
ios
core-data
Dominic Williams
sumber
sumber
NSString *basePath = [paths firstObject];
Jawaban:
Saya mendapat pesan kesalahan yang sama persis dengan postingan asli. Saya bergumul dengan ini selama berjam-jam. Itu adalah baris ini di AppDelegate.m saya.
Bagi siapa pun di luar sana yang mencari pesan kesalahan ini dan menemukan utas ini .... coba ini dulu.
Anda harus memastikan bahwa di mana dikatakan [sama dengan nama xcdatamodeld] .... itu !!! Untuk beberapa alasan, nama proyek saya ada di sana dan bukan nama model datanya.
Menggantinya dan langsung bekerja .....
Terima kasih kepada Rock & Muller untuk kontribusinya ....... Anda menyelamatkan saya berhari-hari !!
Gaz.
sumber
blah
dariblah.xcdatamodeld
. Terima kasih internet, dan stackoverflow.verifikasi pertama:
Jika Anda mendapatkan nilai nihil mungkin masalahnya ada di sini
Jadi, coba ubah @ "momd" dengan @ "mom"
sumber
modelURL
juganil
. Penyebab paling umum adalah kesalahan ketikRugbyOnTv
. Perhatikan bahwa ini peka huruf besar-kecil.Saya mengalami masalah aneh dengan Xcode 4.3.2 dan iOS 5.
mengembalikan URL yang valid tetapi
mengembalikan NSManagedObjectModel null. Tetapi setelah memeriksa dokumentasi , sepertinya NSManagedObjectModel membutuhkan file dimana NAME_OF_THE_MODEL.momd adalah direktori yang berisi file NAME_OF_THE_MODEL.mom. Mengubah URL menjadi
kemudian bekerja. Tampaknya aneh bahwa Xcode menghasilkan kode yang tidak bekerja dengan sendirinya ...
sumber
Saya mengalami masalah ini dan mengubah "ibu" menjadi "ibu" tidak melakukan apa-apa. Untuk memperbaikinya saya harus mengklik kanan pada file xcdatamodelId> tampilkan isi paket lalu hapus file .xcurrentversion yang tersembunyi.
PS: Masalah ini baru mulai terjadi setelah saya mengubah nama file model data.
sumber
Sumber lain dari kesalahan ini, terkadang Xcode tidak menyertakan model data dalam build.
Periksa Build Phases target Anda, dan pastikan file * .xcdatamodeld disertakan di bagian Compile Sources.
sumber
Apa yang mungkin terjadi adalah file xcdatamodeld Anda dari kode sumber Apple telah berubah menjadi file xcdatamodel (tanpa d) dan oleh karena itu mereka tidak dianggap sama.
Cara tercepat untuk memperbaikinya, adalah dengan memilih file xcdatamodel di navigator proyek Anda dan masuk ke bilah menu
Editor->Add Model Version...
dan tambahkan versi baru model Anda. Lakukan semua perubahan ke versi baru.
Ini berfungsi di Xcode 5
sumber
Saya menyelesaikannya dengan menambahkan file db ke file
Copy Bundle Resources
.Pergi ke root proyek Anda >> pilih target Anda >> Build Phases >> Copy Bundle Resources. Pastikan file xcdatamodeld Anda telah ditambahkan di sini.
Tidak ada solusi yang diposting yang berhasil untuk saya. Jadi, semoga postingan ini membantu seseorang di luar sana. Aplikasi saya hanya mogok dalam rilis build btw. Pelajaran yang dipelajari. Selalu uji rilis build!
BTW, saya menemukan posting SO ini https://stackoverflow.com/a/6708837/951349 yang paling membantu .
sumber
saya mendapat masalah yang sama dengan @Dominic Williams
coba ubah nama file momd di bawah ini (Anda dapat menemukan ini dalam
managedObjectModel
metode secara default), yang sama dengan[file name].xcdatamodeld
file yang Anda buat:sumber
Saya memiliki masalah yang sama. Solusinya adalah campuran dari 2 jawaban:
1) Saya harus menambahkan parameter "subdirektori" ke dalam panggilan URLForResource
2) Untuk alasan yang saya tidak tahu, model data tidak disertakan saat proyek dikompilasi. Saya harus menambahkannya secara manual ke dalam "Build Phases / Compile resources".
Dengan hanya satu dari solusi di atas, aplikasi saya tidak berfungsi.
sumber
Solusi untuk masalah yang Anda bicarakan itu sederhana. Ubah ekstensi file menjadi "mom" bukan "momd" di URL model. Selesai.
sumber
Saya mencoba semua solusi di sini, dan tidak ada yang berhasil. Masalah saya muncul setelah saya mengganti nama proyek. Ternyata, Xcode terus mencari file momd lama di tempat yang salah selama kompilasi.
Bagi siapa pun yang mencoba semua solusi di atas tanpa hasil, coba periksa jalur lengkap
.xcdatamodeld
file Anda . Itulah yang berhasil bagi saya.sumber
Saya memiliki masalah yang sama, ini berfungsi dengan baik di iOS6 tetapi tidak di iOS5. Beginilah cara saya menyelesaikannya:
.xcdatamodeld
, buka menu Editor dan klik "Tambahkan Versi Model ...").xcdatamodeld
Model Data Inti Berversi di bawah).xcdatamodeld
file di xcode.xcdatamodeld
file di Finder dan pilih "Show Package Contents".xcdatamodel
yang tidak Anda inginkan.xcdatamodeld
in xcode(Di sinilah saya menemukan cara menghapus versi Model: Cara menghapus Versi Model Data lama / tidak terpakai di Xcode )
sumber
Saya menyelesaikan masalah tanpa mengubah kode apa pun.
Saya menambahkan ModelName.xcdatamodeld melalui File-> Tambah File alih-alih menyeret file ke Xcode.
sumber
Di sisi saya, masalahnya adalah saya telah mengubah kasus beberapa karakter dalam nama database.
Saat memulai proyek baru, Xcode secara otomatis mengatur semuanya dari nama proyek. Jika Anda mulai memanggil proyek Anda "Rugbyontv" dan kemudian memutuskan untuk mengubah ke "RugbyOnTV" dan melakukan pencarian dan penggantian, itu akan merusaknya. (Penghargaan untuk Rob karena menunjukkan bahwa nama peka huruf besar / kecil)
sumber
Saya telah mencari jawaban selama berjam-jam dan tidak ada yang berhasil. Tapi kemudian saya tiba-tiba menemukan artikel ini . Jadi menurut ini, masalahnya ada pada pengaturan pengontrol root di bagian AppDelegate.m ini:
Sebenarnya Anda harus menentukan pengontrol root apa yang akan mendelegasikan koneksi CoreData Anda. Dan dalam kasus saya, saya memiliki TabBarController yang terhubung ke tampilan lain, jadi pengontrol root tampilan yang ditagih saya didefinisikan sebagai TabBar dan itu menyebabkan kesalahan. aku berubah
untuk
dan semuanya bekerja.
sumber
Saya tahu ini tidak menyelesaikan masalah Anda, tetapi saya mengalami masalah ini kemarin yang mengganggu saya selama berjam-jam, solusi yang diposting @Dominic Williams memberi saya ArrayIndexOutOfBoundsException (apa pun yang setara dengan Objective-C).
Saya belum terlalu mahir menggunakan Objective-C / Xcode, tetapi saya sedang mengerjakan aplikasi iOS yang (kebanyakan) dikembangkan oleh perusahaan kami secara eksternal. Sayangnya, mereka sering lupa bagaimana menggunakan keyboard dan akan menggunakan huruf kapital secara bergantian atau properti ejaan yang salah tetapi terlalu malas untuk kembali dan mengubahnya. Mereka telah menggunakan huruf kapital dalam nama proyek xcode yang tidak seharusnya (nama produk kami tidak menggunakan huruf kapital) dan saya harus kembali dan mengubah setiap kemunculan huruf besar ini menjadi huruf kecil ; yang menyertakan nama proyek, file data inti, ratusan variabel, dll.
Bagaimanapun, setelah saya melakukan ini, saya mengalami kesalahan ini dan tidak ada solusi yang memperbaikinya untuk saya. Saya telah memastikan bahwa semua nama URL benar, proyek dibersihkan, aplikasi dicopot, telepon dimulai ulang, dll tanpa hasil. Saya menyerah dan mematikan Mac saya dan pulang untuk hari itu. Yang mengejutkan saya, saya kembali pagi ini dan semuanya tampak bekerja dengan baik!
Saya tidak tahu mengapa ini berhasil tetapi jika Anda macet, coba mulai ulang Mac Anda.
sumber
Jika seseorang terjebak karena masalah yang sama. Pastikan Anda telah menautkan database dengan benar (karena Anda mungkin telah menyalin kode langsung dari beberapa contoh).
Cukup perbarui nama database dalam metode managedObjectModel dan persistentStoreCoordinator di AppDelegate.
sumber
Saya memiliki masalah yang sama, yaitu
mengembalikan nihil, karena tidak ada file .momd yang dibuat.
Alasannya adalah karena dalam direktori aplikasi (mis. MyGreatApp / MyGreatApp.app) xcode telah menyalin MyModel.xcdatamodeld alih-alih membuat MyModel.momd dari file MyModel.xcdatamodeld (menggunakan momc).
Solusinya adalah menghapus referensi ke MyModel.xcdatamodeld di dalam browser proyek XCode dan menyeretnya kembali ke dalam proyek dari pencari. Setelah itu xcode menyadari perlu mengkompilasinya menjadi .momd.
sumber
Saya mengalami masalah ini entah dari mana setelah saya menghapus aplikasi yang dibuat di
~/Library/Application Support/iPhone Simulator
. Entah bagaimana, hal ini menyebabkan build berikutnya gagal di simulator dan di perangkat. Tidak mengubah apa pun yang berkaitan dengan CoreData selama berabad-abad tetapi akan gagal denganCannot create an NSPersistentStoreCoordinator with a nil model
. Mencoba beberapa hal di atas dan tidak ada yang berhasil.Saya bisa melihat folder momd yang dihasilkan dengan file mom di dalamnya. Aplikasi di simulator dapat melihat keduanya tetapi gagal menghasilkan file sqlite.
Yang memecahkannya adalah menambahkan atribut ke entitas di file xcdatamodeld saya di Xcode dan kemudian segera menghapusnya. Saya berharap ini akan membuat Xcode meregenerasi apa pun yang menyebabkan masalah dari awal dan sepertinya berhasil. Masih belum jelas apa yang sebenarnya salah, tetapi aplikasi saya berjalan di simulator dan perangkat lagi sekarang.
sumber
Saya baru saja mengalami masalah serupa saat memutakhirkan dari IOS5 ke IOS6. Ternyata itu adalah masalah case sensitive dengan nama model.
Tidak yakin apakah ini membantu siapa pun.
sumber
Lihat juga utas ini: Uji Unit tidak dapat menemukan file model Data Inti
Ini membantu saya memecahkan masalah - yang hanya terjadi dengan Unit-Testing
sumber
Oke, saya akan memberi tahu setengah solusi dulu, ini akan berfungsi jika Anda menginstal ulang aplikasi (di perangkat simulator atau debugger). Tapi itu bukan solusi yang pasti. Misalnya, jika Anda mengupdate aplikasi, JANGAN lakukan itu atau versi baru Anda mungkin error karena pengguna tidak akan menginstalnya kembali, mereka akan menggunakan tombol update.
Seperti yang saya pahami, masalah ini sebagian besar terjadi saat Anda mengubah nama file model data. Alasannya mungkin seperti ini:
. Saat Anda menjalankan aplikasi untuk pertama kali, itu membuat file model data di app bundle seperti "data_model_1". Penciptaan ini hanya terjadi untuk pertama kalinya.
. Saat Anda memperbarui nama file dan menjalankan aplikasi lagi, aplikasi tidak akan dapat menemukannya karena masih ada file "data_model_1" tetapi Anda menyuruhnya untuk mencari "data_model_2". Bagaimana bisa ditemukan, itu belum membuatnya dan tidak akan melakukannya kecuali Anda tidak menginstal aplikasi dengan nama file baru.
Jadi, jika ini adalah versi pertama aplikasi Anda dan menginstal ulang pada simulator atau perangkat tidak membahayakan proyek Anda, lakukanlah. Jika tidak, periksa Panduan Pembuatan Versi dan Migrasi Data Inti di iOS Developer Library, mungkin itu yang Anda butuhkan.
Edit: Jika penginstalan ulang tidak berhasil, coba uninstal terlebih dahulu, lalu bersihkan project, lalu tutup semuanya, buka kembali project, dan build + run. Seharusnya itu berhasil.
sumber
Jika proyek Anda bekerja pada simulator tetapi tidak pada perangkat, coba jalankan rilis-build pada perangkat Anda, bukan pada debug-build.
Pilih proyek Anda -> Produk -> Edit Skema -> Konfigurasi Bangun [DEBUG -> RELEASE]
Sekarang jalankan proyek lagi, itu akan berhasil.
sumber
Saya juga menghadapi masalah ini tetapi ketika saya mengubah
ModelName.xcdatamodeld
file itu berfungsi. jadi saya pikirModelName.xcdatamodeld
file tidak ditambahkan dengan benar, jadi periksa dan bersihkan aplikasi dan jalankan.sumber
Setelah saya memperbaiki masalah penamaan, kesalahan tetap ada. Kemudian berfungsi setelah Xcode dimulai ulang 5. Ini mungkin secara otomatis melakukan hal yang sama seperti beberapa saran penautan manual yang ditawarkan di sini.
sumber
Bagi saya, masalahnya adalah karena saya menyalin model saya dari proyek kotak pasir ke proyek saya yang sebenarnya. Selalu pastikan untuk membuat model Anda dari dalam proyek yang model tersebut digunakan.
sumber
Saya menghadapi kesalahan yang sama ketika saya berganti nama dengan
.xcdatamodel
file dari Xcode dan mengubah nama yang diganti nama di app delegasi di mana pun diperlukan, tetapi saya masih punya kesalahan yang sama. Tak satu pun dari prosedur yang disarankan berhasil untuk saya.Kemudian saya membuka folder tersebut
Finder
dan menemukan file tambahan.xccurrentversion
bersama dengan.xcdatamodel
file. Saya membukanya diTextEdit
aplikasi dan mengubah ini:Saya menggunakan ini dengan Xcode 6.4, OSX Yosemite 10.10.1
Saya harap ini membantu!
sumber