我正在使用 iOS 5.0 中的新 UIDocument 功能。我有一个使用多个不同数据模型(momd 文件)的现有应用程序。根据 UIManagedDocument 的文档,您可以覆盖 -(NSManagedObjectModel*)managedObjectModel 以加载特定的数据模型(默认是加载所有找到的合并在一起的数据模型)。两种数据模型都有重叠的模型名称和不同的模式,所以这在我的情况下是不可取的。
因此,我在一个简单示例中遇到的问题是我可以覆盖该函数,但我无法分配它的结果。它都是私有的,所以_managedObjectModel 不能被子类访问;而且,它是只读的,因此无法分配 self.managedObjectModel ..
我寻找了一个覆盖 managedObjectModel 的 UIManagedDocument 示例,但 Apple 似乎没有提供。
我也许可以定义一个新的实例变量 _myManagedObjectModel 并分配它。然后在我覆盖的访问器上返回它。我担心的是,这可能会破坏 UIManagedDocument 的一些内部实现,它不使用 managedObjectModel 访问器而不是 _managedObjectModel (这在苹果的实现中经常看到......)
似乎是一个直截了当的问题,我怀疑我只是错过了一些非常简单的东西来允许适当的覆盖。
//
// 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