我正在使用iOS 5.0中的新UIDocument特性。我有一个现有的应用程序,它使用多个不同的数据模型(momd文件)。根据UIManagedDocument的文档,您可以覆盖-(NSManagedObjectModel*)managedObjectModel来加载特定的数据模型(缺省值是加载所有找到的数据模型合并在一起)。这两个数据模型都有重叠的模型名称和不同的模式,因此在我的例子中这是不可取的。
所以,在一个简单的示例中,我遇到的问题是,我可以覆盖该函数,但不能将其结果赋值。它既是私有的,因此子类无法访问_managedObjectModel;而且,它是只读的,因此无法分配self.managedObjectModel。
我一直在寻找一个超越managedObjectModel的UIManagedDocument示例,但苹果似乎没有提供这样的示例。
我也许能够定义一个新的实例变量_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发布于 2011-11-01 04:10:00
我上周解决了这个问题,但我想我应该更新一下以反映我的解决方案。如果你找到更好的东西,我会很高兴看到的。
我在starts的类头中添加了一个唯一的属性:
@property (nonatomic,retain,readonly) NSManagedObjectModel *myManagedObjectModel;然后在我的类实现中添加了以下内容:
-(NSManagedObjectModel*)myManagedObjectModel {
if (myManagedObjectModel)
return myManagedObjectModel;
NSBundle *bundle = [NSBundle mainBundle];
NSString *modelPath = [bundle pathForResource:kDataManagerModelName ofType:@"momd"];
myManagedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]];
return myManagedObjectModel;
}
-(NSManagedObjectModel*)managedObjectModel {
return self.myManagedObjectModel;
}因为我可以重写managedObjectModel的get属性,所以可以很好地工作。到目前为止,在我的测试和实现中,UIManagedDocument初始化并正常工作。执行跟踪显示managedObjectModel在init上被调用,所以我假设从返回的结果中一切都被正确初始化。
发布于 2012-05-25 18:50:35
我终于找到了你的解决方案的问题所在。UIManagedDocument应该允许我们更改objectmodelLoading选项...
您的代码中缺少以下内容:
.m文件
#import <CoreData/CoreData.h>
@implementation DTNoteDocument{
NSManagedObjectModel * myManagedObjectModel;
}https://stackoverflow.com/questions/7878463
复制相似问题