Я уверен, что это, должно быть, глупый вопрос, но я покопался в паутинах и не могу найти ответ. Многие люди говорят об использовании шаблона Generation Gap, в котором у вас есть подкласс NSManagedObject, сгенерированный из вашей модели, а затем подкласс, который добавляет временные свойства и поведения. Преимущество этого заключается в том, что если вы измените свою постоянную модель, вы можете просто снова сгенерировать свои базовые файлы без какой-либо опасности перезаписи собственного кода.
У меня есть базовый объект CardMO, полученный из NSManagedObject. Затем я делаю это на подкласс, чтобы создать собственный объект Card.
У меня вопрос, как мне создать управляемый объект Card?
Я пытался:
Card* card = [NSEntityDescription insertNewObjectForEntityForName:@"CardMO" inManagedObjectContext:moc];
Но этот объект на самом деле не является картой, и, конечно, есть исключение, когда я продолжаю вызывать метод карты для этого объекта.
Я пытался создать карту с помощью alloc / init (где init просто вызывает [super init]), а затем добавить ее в managedObjectContext следующим образом:
[moc insertObject:(CardMO*)card];
Это дает мне загадочную ошибку "Не удалось вызвать назначенный инициализатор для класса NSManagedObject 'Card'"
Я попытался изменить это, вызвав [NSEntityDescription insertNewObjectForEntityForName: @ "CardMO" inManagedObjectContext: [AIStoreManager sharedAIStoreManager] .managedObjectContext] вместо [super init]. В этом случае объект, который я возвращаю, снова является CardMO, и я не могу вызвать методы Card для него.
Что мне делать?
И (для бонусных баллов :-) - после того, как я преодолел это препятствие, мне нужно создать мои другие объекты Card из XML, а затем превратить их в NSManagedObjects. Я использую код, основанный на Apple XMLReaderSAX - я передаю этот код в виде фрагмента XML, и он возвращает мне массив многих объектов Card. Могу ли я позже добавить эти объекты в контекст моего управляемого объекта или мне нужно войти в XMLReaderSAX и изменить способ создания этих объектов?
Я пишу приложение для iPhone на 3.0, но предполагаю, что это то же самое для Core Data для 10.5.