SORU
3 NİSAN 2012, Salı


Bir NSPersistentDocument hafif geçiş

Çekirdek Veri SQLite store hafif bir geçiş yapmaya çalışıyorum. Böyle büyük mükafat 4.3.1 ile Lion 10.7.3 üzerinde çalışıyor.

NSPersistentDocument benim alt (AccountDocument), taşıma için uygun seçenekleri alır, böylece yöntemi kalıcı mağaza Koordinatörü yapılandırmak için kullanılan geçersiz ettim:

- (BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType modelConfiguration:(NSString *)configuration storeOptions:(NSDictionary *)storeOptions error:(NSError **)error
{
    NSMutableDictionary *newStoreOptions;
    if (storeOptions == nil) {
        newStoreOptions = [NSMutableDictionary dictionary];
    }
    else {
        newStoreOptions = [storeOptions mutableCopy];
    }
    [newStoreOptions setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
    [newStoreOptions setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];

    BOOL result = [super configurePersistentStoreCoordinatorForURL:url ofType:fileType modelConfiguration:configuration storeOptions:newStoreOptions error:error];
    return result;
}

(İpucu için Malcolm Crawford sayesinde: http://homepage.mac.com/mmalc/CocoaExamples/controllers.html)

Uygulamayı çalıştırdığımda, -managedObjectModel NSPersistentDocument bu uygulamada başarısız:

* thread #1: tid = 0x2703, 0x00007fff931d9350 libobjc.A.dylib`objc_msgSend_vtable13   16, stop reason = EXC_BAD_ACCESS (code=13, address=0x0)
    frame #0: 0x00007fff931d9350 libobjc.A.dylib`objc_msgSend_vtable13   16
    frame #1: 0x00007fff8935e975 CoreData`-[NSKnownKeysDictionary1 _setValues:retain:]   197
    frame #2: 0x00007fff8935f288 CoreData`_newReadModelFromBytes   648
    frame #3: 0x00007fff8935b93e CoreData` [NSManagedObjectModel(_NSManagedObjectModelPrivateMethods) _newModelFromOptimizedEncoding:error:]   9310
    frame #4: 0x00007fff89359451 CoreData`-[NSManagedObjectModel(_NSManagedObjectModelPrivateMethods) initWithContentsOfOptimizedURL:]   305
    frame #5: 0x00007fff89358d7b CoreData`-[NSManagedObjectModel initWithContentsOfURL:]   443
    frame #6: 0x00007fff893e9519 CoreData` [NSManagedObjectModel mergedModelFromBundles:]   377
    frame #7: 0x00007fff8ded7037 AppKit`-[NSPersistentDocument managedObjectModel]   301
    frame #8: 0x00007fff8ded70b3 AppKit`-[NSPersistentDocument managedObjectContext]   75
    frame #9: 0x00007fff8ded6e3f AppKit`-[NSPersistentDocument _persistentStoreCoordinator]   18
    frame #10: 0x00007fff8ded6b5d AppKit`-[NSPersistentDocument configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:]   51
    frame #11: 0x0000000100003193 BeanCounter`-[AccountDocument configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:]   419 at AccountDocument.m:298

Belgelerden anladığım kadarıyla, varsayılan uygulama bu gibi görünür:

- (id)managedObjectModel
{
    NSManagedObjectModel *result = [NSManagedObjectModel mergedModelFromBundles:nil];
    return result;
}

Yani sorun biraz daha fazla hata ayıklamak için bu yöntemi geçersiz kılıyordu:

- (id)managedObjectModel
{
    NSBundle *bundle = [NSBundle mainBundle];
    NSURL *url = [bundle URLForResource:@"AccountDocument2" withExtension:@"momd"];
    NSManagedObjectModel *result = [[[NSManagedObjectModel alloc] initWithContentsOfURL:url] autorelease];  
    return result;
}

(Jeff için teşekkürler fikir için LaMarche: http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html)

Paket ve url beklediğim yerler Marcus Zarra'nın tavsiyesi proje temizlemek için izledim yani herhangi bir sokak yok. (iki nokta anne ya .uygulama paketi momd demetleri: Using mergedModelFromBundles: and versioning (CoreData)). Henüz app url model yüklenirken crash devam ediyor.

Bu AccountDocument2 kontrol ettim.xcdatamodeld sürüm için iki model olan bir paket: AccountDocument 2.ve (orijinal) AccountDocument xcdatamodel.xcdatamodel. "Sürüm Bilgisi Temel Veri Modeli" dosya özellikleri menüsü "olarak ayarlanır AccountDocument 2".

İki model arasındaki tek fark, tek bir Varlık (ve) isteğe bağlı ek bir niteliği vardır. Benim anlayışıma göre hafif bir geçiş modeli olarak nitelendirir.

Belli ki, burada yanlış bir şey yapıyorum, ama hiç bir fikrim yok. Herhangi bir yardım çok mutluluk duyacağız...

Güncelleme:

Martin önerisi (ve NSPersistentDocument belgelerini kontrol) başına erişimci için bu kodu kullanarak çalıştı:

- (id)managedObjectModel
{
    static id sharedManagedObjectModel = nil;

    if (sharedManagedObjectModel == nil) {
        NSBundle *bundle = [NSBundle mainBundle];
        NSURL *url = [bundle URLForResource:@"AccountDocument2" withExtension:@"momd"];
        sharedManagedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
    }

    return sharedManagedObjectModel;
}

Hala çökmesini...

Güncelleme

Twitter'da bazı öneriler sonra, 4.3.2, ama sorunlar devam ediyor " Güncellemelerinden için yükselttim.

GÜNCELLEME ÖFKE

Ben sadece sürüm bilgisi model paketi (AccountDocument2.oluşturulan xcdatamodeld) Snow Leopard üzerinde böyle büyük mükafat 4.2 kullanıyor. Ve uygulaması bina çalıştırdıktan sonra, her şeyin beklendiği gibi çalışır.

Ben o AccountDocument2 aldı.xcdatamodeld dosya paketi Lion ve Xcode 4.3.2 dönüyoruz. Ve app çalıştırın, yükleme sırasında çökmesine devam eder .momd kaynak. Evet çocuklar, 4.3 böyle büyük mükafat anlamına gelir.x ve Veri Modeli Derleyici (MOMC) sorumlu tutuyor. Geçici bir çözüm Snow Leopard tüm yapı inşa etmek dışında görmüyorum.

Böyle büyük mükafat araç zinciri opak bir dosya üretebilir durumda kendimizi bulduğumuzda 4, ama bash biri değilim (.anne ve .momd) opak bir belirtimi (.xcdatamodel .xcdatamodeld) oldukça zor Mac ve iOS araçlarının durumu hakkında iyimser olmak. Bu platformlar bir çekirdek bileşeni ve SDK ve Geliştirici Araçları en son versiyon benim app inşa koşamam noktaya sonları çok saçma.

Bu Güncelleme geldi

Eğer ben kopyala .bu Veri Modeli Derleyici (MOMC) ile ciddi bir hata olduğunu daha fazla kanıt Güncellemelerinden 4.3.2: projeme Kaynak klasörünü Güncellemelerinden 4.2 tarafından oluşturulan paket momd ve onları Dosyaları faz inşa bir Kopyası olarak inşa edin, uygulama gayet iyi çalışıyor.

Ben de çeşitli Varlıkların Öznitelikleri için doğrulama kuralları ve varsayılan değerleri çıkardım bazı testler yaptım (Marcus dayalı' öneri aşağıda.) Değişiklik yok, derleyici hala geçersiz oluşturur .momd. Ben de HİÇBİR yeri değiştirildi sürümlü bir model oluşturmaya çalıştı: derlenmiş .momd çökmesine devam etti. Yani mevcut modeller (ve temsil ettikleri veri), her sorunun kaynağı.

Not: bu hata NSPersistentDocument (aslında bu soru başladığımda düşündüm.) izole değildir Bir uygulama sadece [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] kullanarak çökmesine neden olabilir.

Şu an için,/benim modeller sürüm Snow Leopard üzerinde böyle büyük mükafat 4.2 kullanarak tekrar derlenmiş kaynakları üzerinde Lion 4.3.2 Güncellemelerinden hareket düzenleme olacağım. Eğer herhangi bir şekilde Çekirdek Veri kullanırsanız, bu hata hitaben kadar sana da aynısını öneririm. Güven bana, Eğer ... Eğer ... gün neler olduğunu anlamaya çalışarak geçirirsin.

Şimdi bir Radar gönderin

Radar Güncelleştirin

Ben sadece bu Radar gönderilmiş

http://www.openradar.me/11184500

Oh Aslan Update Olmalı Saçmalığı

Ben sadece http://developer.apple.com/downloads Aslan araçlar için böyle büyük mükafat 4.2 indirilen yüklü. Örnek uygulama Radar kullanılan hala çöküyor.

(Not: sertifika DeveloperTools imzalamak için kullanılır.çünkü böyle büyük mükafat 4.2.1 yükleyebilirsiniz.paket süresi doldu. Sadece böyle büyük mükafat.)

Eğer NİV altında iseniz ayrıca beta araçları yararlı değildir.

Böyle büyük mükafat 4.2 ile Snow Leopard kopyası olduğunu umuyorum oturmuş: http://furbo.org/2012/03/28/vmware-for-developers/

Bu İŞE İstekleri sürüm Bilgisi Varlıklar İle alakası Getirme ve Güncelleme bağlıyor

Twitter üzerinden Evadne'nin Wu:

https://twitter.com/#!/evadne/status/187625192342818818

Ve nasıl yaptı:

https://twitter.com/#!/evadne/status/187629091518816258

(.annem dosyaları ikili plists.)

Sorunun kökü Getirme İsteği bir tek. O başka bir model verileri bir geçiş içine rakamları nasıl Apple'da mühendis anlamaya yöneliktir.

CEVAP
4 NİSAN 2012, ÇARŞAMBA


Derlenmiş .momd kaynakları "" değiştirildiğinde getirme isteği: . existingPartner sonra yüklenebilir

name == $name

için:

name == $NAME

Veri sebat etkilemez nesne modelinin bir parçası sürüm ve hafif göç keser, kulağa saçma geliyor. Bu durumda olması gereken belgelerden çok açık:

Sürüm çekirdek Veri açısından kalıcılık etkileyen model özellikleri ile ilgilenen sadece o değildir.

CHOCKLOCK güç isteklerinize Getirme veya tamamen silmek ve düzeltmek NSPredicates created in code güvenmek kullanın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ben Schoon

    Ben Schoon

    23 Kasım 2012
  • Kassem G

    Kassem G

    25 EKİM 2006
  • Mark Hyder

    Mark Hyder

    6 EKİM 2011