gpt4 book ai didi

objective-c - 覆盖 UIManagedDocument 中的 managedObjectModel

转载 作者:太空狗 更新时间:2023-10-30 03:52:12 25 4
gpt4 key购买 nike

我正在使用 iOS 5.0 中的新 UIDocument 功能。我有一个使用多个不同数据模型(momd 文件)的现有应用程序。根据 UIManagedDocument 的文档,您可以覆盖 -(NSManagedObjectModel*)managedObjectModel 以加载特定的数据模型(默认加载所有找到的数据模型并合并在一起)。两种数据模型都具有重叠的模型名称和不同的架构,因此在我的情况下这是不可取的。

Relevant Apple Doc

所以,我在一个简单示例中遇到的问题是,我可以重写该函数,但我无法分配它的结果。都是私有(private)的,所以_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

标题:

#import <UIKit/UIKit.h>

@interface DTNoteDocument : UIManagedDocument

@end

最佳答案

我上周解决了这个问题,但我想我会更新以反射(reflect)我的解决方案。如果你找到更好的东西,我会很高兴看到它。

我在开始的类头中添加了一个独特的属性:

@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,因此我假设所有内容都已根据返回的结果正确初始化。

关于objective-c - 覆盖 UIManagedDocument 中的 managedObjectModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7878463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com