2010-07-10 17 views
8

Yalnızca Çekirdek Verileri'ne girmeye ve doğrudan sopayı kaldırmaya çalışıyor. Benim AppDelegate ben aşağıdaki kodu vardır:- [NSURL initFileURLWithPath:]: nil dizi parametresi 'on NSManagedObjectModel

@ "DataModel" Benim .xcdatamodel dosyasının adıdır
- (NSManagedObjectModel *)managedObjectModel { 

    if (managedObjectModel_ != nil) { 
     return managedObjectModel_; 
    } 
    NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"DataModel" ofType:@"momd"]; 
    NSURL *modelURL = [NSURL fileURLWithPath:modelPath]; 
    managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];  
    return managedObjectModel_; 
} 

- Bu doğru mu?

+5

'u anlamaya çalışan herkes için olan bitenin, annenin değil anne tipinde olduğundan emin olduğunu umarız. (sürümlenmiş ve dönüştürülmemiş model) –

cevap

8

O bir anne ise Ardından

managedObjectModel_ = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; 

için bunu değiştirmek ya da hala geri modelini alacak momd genellikle daha kolaydır.

+0

managedObjectModel_ = [[NSManagedObjectModel birleştirilmişModelFromBundles: nil]); –

12

"Momd" yi yalnızca "anneme" olarak değiştirmek benim için çalıştı.

managedObjectModel_ = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; 

O çizgi ne hiçbir fikrim yok olsa: Ben sözdizimi sabit bir kez Marcus S. zarra cevabı da benim için çalıştı.

Düzenleme: Daha fazla araştırma yaptım ve şimdi yukarıdaki satırın ne yaptığını ve neden işe yarayıp yaramadığını biliyorum. Yukarıdaki satır projenizi tüm modeller için arayacak ve bunları xcdatamodel'e ekleyecektir. Bu, sürümlü modeller kullanmıyorsanız çalışır. Bununla birlikte, gelecekte modelli modellere geçiş yaparsanız, bu modelin tüm versiyonlarını içe aktarır, böylece hem eski hem de yeni olanı birlikte elde edersiniz. Yani çözüm iki şeyden birini yapmaktır. Eğer bir sürüm bilgisi olmayan modeli modeli kapmak için aşağıdaki satırları kullanmak kullanmak istiyorsanız: (önerilir) sürümü belirlenmiş modeli kullanmak modeli seçmek ve Tasarım çalıştırmak istiyorsanız

NSString *modelPath = [[NSBundle mainBundle] 
    pathForResource:@"DataModel" ofType:@"mom"]; 
NSURL *modelURL = [NSURL fileURLWithPath:modelPath]; 
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 

-> Veri Modeli -> Add Versiyonlu bir model oluşturmak için menubardan Model Sürümü. Bu, modelinizin uzantısını xcdatamodel'den xcdatamodeld'e otomatik olarak değiştirecektir. Bu yapıldıktan sonra aşağıdaki satırları kullanın: Tek fark "momd" @ için "Anne" @ dan OfType parametre değişikliklerini ise

NSString *modelPath = [[NSBundle mainBundle] 
    pathForResource:@"DataModel" ofType:@"momd"]; 
NSURL *modelURL = [NSURL fileURLWithPath:modelPath]; 
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 

Bildirim söyledi. Bu, CoreData.D

İlgili konular