jsa*_*ara 5 core-data objective-c ios5 uimanageddocument
我正在使用iOS 5.0中的新UIDocument功能.我有一个使用多个不同数据模型(momd文件)的现有应用程序.根据UIManagedDocument的文档,您可以覆盖 - (NSManagedObjectModel*)managedObjectModel来加载特定的数据模型(默认是加载所有找到的数据模型合并在一起).两个数据模型都具有重叠的模型名称和不同的模式,因此在我的情况下这是不可取的.
所以,我在一个简单的示例中遇到的问题是,我可以覆盖该函数,但我无法分配它的结果.它都是私有的,因此子类无法访问_managedObjectModel; 并且,它是只读的,因此无法分配self.managedObjectModel ..
我找到了一个覆盖managedObjectModel的UIManagedDocument示例,但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
Run Code Online (Sandbox Code Playgroud)
标题:
#import <UIKit/UIKit.h>
@interface DTNoteDocument : UIManagedDocument
@end
Run Code Online (Sandbox Code Playgroud)
我上周解决了这个问题,但我想我会更新以反映我的解决方案.如果你找到更好的东西,我会很高兴看到它.
我为我的类标题添加了一个唯一的属性:
@property (nonatomic,retain,readonly) NSManagedObjectModel *myManagedObjectModel;
Run Code Online (Sandbox Code Playgroud)
然后将以下内容添加到我的类实现中:
-(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;
}
Run Code Online (Sandbox Code Playgroud)
由于我可以覆盖managedObjectModel的get属性,因此效果相当不错.到目前为止,UIManagedDocument在我的测试和实现中初始化并正常工作.执行跟踪显示在init上调用managedObjectModel,因此我假设从返回的结果中正确初始化了所有内容.
| 归档时间: |
|
| 查看次数: |
1519 次 |
| 最近记录: |