Я работаю с новыми функциями UIDocument в iOS 5.0. У меня есть существующее приложение, которое использует несколько разных моделей данных (файлы momd).Согласно документации для UIManagedDocument, вы можете переопределить - (NSManagedObjectModel *) managedObjectModel для загрузки определенной модели данных (по умолчанию загружаются все найденные модели данных, объединенные вместе). Обе модели данных имеют перекрывающиеся названия моделей с разными схемами, поэтому в моем случае это нежелательно.
Соответствующий документ Apple
Итак, проблема, с которой я столкнулся в простом примере, заключается в том, что я могу переопределить функцию, но не могу присвоить ей результат. Оба они являются частными, поэтому подкласс не может получить доступ к _managedObjectModel; и он доступен только для чтения, поэтому self.managedObjectModel не может быть назначен ..
Я искал пример UIManagedDocument, который действительно переопределяет managedObjectModel, но Apple, похоже, его не предоставляет.
Возможно, я смогу определить новую переменную экземпляра _myManagedObjectModel и назначить ее. Затем верните это на аксессуар, который я отменяю. Меня беспокоит то, что может нарушиться некоторая внутренняя реализация UIManagedDocument, которая не использует аксессор managedObjectModel в предпочтении для _managedObjectModel (что часто встречается в реализациях Apples ...)
Похоже на прямую проблему, и я подозреваю, что я просто не хватает чего-то действительно простого, чтобы можно было правильно переопределить.
//
// DTNoteDocument.m
// document-test
//
//
#import "DTNoteDocument.h"
@implementation DTNoteDocument
NSString * const kDataManagerModelName = @"Note";
-(NSManagedObjectModel*)managedObjectModel {
if (_managedObjectModel != nil)
return _managedObjectModel;
NSBundle *bundle = [NSBundle mainBundle];
NSString *modelPath = [bundle pathForResource:kDataManagerModelName ofType:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]]; // compile error on this line, private variable cannot be assigned
return _managedObjectModel;
}
@end
Заголовок:
#import
@interface DTNoteDocument : UIManagedDocument
@end