Я работаю с новыми функциями UIDocument в iOS 5.0.У меня есть приложение, которое использует несколько различных моделей данных (файлы MOMD).Согласно документации для UIManagedDocument, вы можете переопределить - (NSManagedObjectModel *) managedObjectModel, чтобы загрузить определенную модель данных (по умолчанию загружаются все найденные модели данных, объединенные вместе).Обе модели данных имеют перекрывающиеся имена моделей с разными схемами, поэтому в моем случае это нежелательно.
Соответствующий Apple Doc
Итак, проблема, с которой я столкнулся здесь впростой пример: я могу переопределить функцию, но не могу присвоить ее результат.Он является частным, поэтому подкласс не может получить доступ к _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 <UIKit/UIKit.h>
@interface DTNoteDocument : UIManagedDocument
@end