Bunun aptalca bir soru olması gerektiğine inanıyorum, ancak birlikte yazmayı araştırdım ve cevabı bulamıyorum. Birçok kişi, modelinizden oluşturulan bir NSManagedObject alt sınıfınızın olduğu Generation Gap modelini kullanmayı ve sonra geçici özellikler ve davranışlar eklemek için bunu alt sınıfta kullanmayı konuşur. Bunun yararı, kalıcı modelinizi değiştirirseniz, kendi kodlarınızı üzerine yazma tehlikesi olmadan, temel dosyalarınızı yeniden oluşturabilmenizdir.CoreData - NSManagedObject öğesinin alt sınıfının bir alt sınıfının nasıl oluşturulacağı (Generation Gap pattern)
NSManagedObject türetilmiş bir temel CardMO nesnesine sahibim. Daha sonra bunu kendi Kart nesnesini yapmak için alt sınıflara ayırdım.
Sorum şu ki, yönetilen bir Kart nesnesini nasıl oluşturabilirim?
Denedim:Card* card = [NSEntityDescription insertNewObjectForEntityForName:@"CardMO" inManagedObjectContext:moc];
Ama bu nesne gerçekten Kart değildir ve bu nesne üzerinde bir kart yöntemini çağırmak için giderken elbette bir istisna var.
[moc insertObject:(CardMO*)card];
Bu bana şifreli hata "veriyor:
böyle managedObjectContext eklemeden (init sadece [süper init] çağrıları) alloc/init ile Kart oluşturma çalıştı ve ardından ettik NSManagedObject sınıf 'Kart' atanmış başlatıcı aramak başarısız" arayarak
Bunu değiştirerek denedim [NSEntityDescription insertNewObjectForEntityForName: @ ": [AIStoreManager sharedAIStoreManager] .managedObjectContext CardMO" inManagedObjectContext] yerine [süper init]. Bu durumda geri aldığım nesne yine bir CardMO'dur ve kart yöntemlerini arayamıyorum.
Ne yapmalıyım?
Ve (bonus puanları için :-) - bu engeli geçtikten sonra, diğer Kart nesnelerini XML'den oluşturmalı ve sonra bunları NSManagedObjects uygulamasına dönüştürmeliyim. Apple'ın XMLReaderSAX'ini temel alarak kod kullanıyorum - bu kodu XML'in bir parçasına veriyorum ve bir çok fazla Kart nesnesini geri veriyor. Daha sonra bu nesneleri yönetilen nesne bağlamıma ekleyebilir miyim, yoksa XMLReaderSAX'a girip bunları nasıl oluşturduğunu değiştirebilir miyim?
3.0 sürümünde bir iPhone uygulaması yazıyorum, ancak bunun 10.5 Çekirdek Veriler için aynı olduğunu varsayalım.
Yönetilen nesneyi ayrıştırıcıdan yapmak için, Apple türetilmiş koduna girmem ve yukarıdaki gibi görünmesi için nesne oluşturma kodunu değiştirmem gerekiyordu. İyi çalıştı. –