iPhone Core Data "Otomatik Hafif Göç"
Çekirdek veri deposu uygulayan bir uygulamayı güncellemek için çalışıyorum. Varlık için bir öznitelik ekliyorum.
Temsilci benim sınıf için aşağıdaki kodu ekledim:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Shoppee.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
NSLog(@"Error: %@",error);
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator;
}
Bu, aşağıdaki URL oldu: Doc
Bu kodu çalıştırırken aşağıdaki hatayı alıyorum:
2009-12-01 20:04:22.877
Shoppee[25633:207] Hata: Hata
Etki Alanı==134130 Kodu NSCocoaErrorDomain
Kullanıcı bilgisi=0x1624d20 "Işlem tamamlanamadı. (Kakao hata 134130.)" 2009-12-01 20:04:22.879 Shoppee[25633:207] Çözülmeyen hata Hata Etki alanı==134130=NSCocoaErrorDomain Kodu Bilgisi 0x1624d20 "İşlem tamamlanamadı. (Kakao hata 134130.)", { URL =:///Users/Eric/Library/Application Support/iPhone Simülatörü/Kullanıcı/Uygulama/A8A8FB73-9AB9-4EB7-8F83-82F5B4467AF1/Belgeler/Uygulamam localhost dosya.sqlite; = meta { NSPersistenceFrameworkVersion = 241; = NSStoreModelVersionHashes { Madde = &; 869d4b20 088e5c44 5c345006 67ab9bc4 87d245cd lt 14cadf45 180251e9 f741a98f>; Store= &; 47c250f4 895e6fd1 5033ab42 7819ba75 22d2d493 lt 3c0acffc 2dc54515 8deeed7a>; }; NSStoreModelVersionHashesVersion = 3; = NSStoreModelVersionİdentifiers ( ); NSStoreType = SQLite; NSStoreUUİD = "8DC65301-3BC5-42BE-80B8-E44577B8F8E1"; }; neden = "kaynak deposu için model bulamadım"; }
Ben bir şekilde orijinal veri modeli eklemek gerekir gibi görünüyor ama bunu nasıl emin değilim. Herhangi bir öneriniz var mı?
CEVAP
/Tam kılavuz özetlemek gerekirse:
Herhangi bir değişiklik yapmadan önce, yeni model bir sürümünü oluşturun.
Böyle büyük mükafat 4: Select * - ^ * 3 . Editör ->Model Sürümü Ekleyin.
Böyle Büyük Mükafat 3: Tasarım ->Veri Modeli ->Model Sürümü Ekleyin.
.xcdatamodel
yeni oluşturulmuş olduğunu göreceksiniz.xcdatamodeld
klasör de yok eğer varsa oluşturulur.Kaydet.
.xcdatamodel
yeni seçin ve the Lightweight Migration documentation uygun istihdam etmek istediğiniz değişim siz olun.Kaydet.
Yeni oluşturulan şema için geçerli/aktif şemasını ayarlayın.
İle
.xcdatamodeld
Seçili klasörü:Böyle büyük mükafat 4: Yardımcı Programlar - ^ Kenar Çubuğu . Dosya Müfettiş ->Sürüm Bilgisi Temel Veri Modeli ->Yeni şema seçin.
Böyle Büyük Mükafat 3: Tasarım >Veri Modeli >Güncel Sürüm.
.xcdatamodel
simgesinin üzerinde yeşil tik yeni şema için hareket edecek.Kaydet.
Zamanında göç gerçekleştirmek için gerekli kodu uygulayın.
Nerede
NSPersistentStoreCoordinator
oluşturulur (genellikle AppDelegate sınıf),options
parametre için, aşağıdaki kodlanil
değiştir:[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]
Uygulamayı çalıştırmak. Eğer kaza ise yok, muhtemelen göç:). başarılı
Başarılı bir şekilde geçirilmesi, geçiş kodu (adım 7) çıkarılabilir. (Geliştirici için yayınlanan bir uygulama kullanıcıları göç etmiş olabilir belirlemek için.)
ÖNEMLİ:Eski model sürümleri silmeyin/şemalar. Temel Veri yeni sürüme geçirmek için eski sürümü gerekiyor.
iPhone Core Data "Üretim" Ha...
Giriş "Text" etiketi - Yakın...
&; "Uyarı: iPhone uygulamaları armv6 m...
Nasıl web sunucusu ile iPhone Core Dat...
() süper yükseltir "eğer data: tü...