gpt4 book ai didi

ios - 创建 NSManagedObject 的子类

转载 作者:行者123 更新时间:2023-11-29 12:09:04 25 4
gpt4 key购买 nike

我有一个子类 NSManagedObject 类:

@interface MapStateDB : NSManagedObject

@end

现在我想创建一个 MapStateDB 类的子类:

.h

@interface MapState : MapStateDB

@property (weak, nonatomic) id <MapStateDelegate> delegate;

@end

.m

@implementation MapState

@synthesize delegate = _delegate;

@end

除了当我尝试创建一个 MapState 对象时,它失败了:

MapState *mapState = [MapState MR_createEntityInContext:context];

DLog(@"mapState: %@", mapState);

输出:

DEBUG | -[LoginViewController testStuff] | mapState: (null)

我可以很好地创建一个“MapStateDB”对象:

MapStateDB *mapStateDB = [MapStateDB MR_createEntityInContext:context];
DLog(@"mapStateDB: %@", mapStateDB);

输出:

DEBUG | -[LoginViewController testStuff] | mapStateDB: <MapStateDB: 0x7d432d00> (entity: MapStateDB; id: 0x7d424640 <x-coredata:///MapStateDB/tF842754F-4044-44E5-A9D5-118389ABF4AA2>

最初的意图是向 NSManagedObject 提供委托(delegate),并在另一个问题中建议将我的 NSManagedObject 子类化:NSManagedObject with Category and Delegate

知道为什么未创建子类 MapState 对象吗?

编辑:

我用 Objective-C 标准 [insertNewObjectForEntityForName:inManagedObjectContext:] 替换了 Magical Record 方法 [MR_createEntityInContext:]:

MapState *mapState2 = [NSEntityDescription insertNewObjectForEntityForName:@"MapState" inManagedObjectContext:context];
DLog(@"mapState2: %@", mapState2);

输出:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an entity named 'MapState' in this model.'

因此 Magical Record 正在捕获错误并返回 nil。所以我猜@Rickster 的问题指向了这个问题,我的核心数据模型不知道 MapState 是什么。

我可以为委托(delegate)创建一个 transient 属性吗?或者我应该只使用包装器类吗?

是否有可能获得具有委托(delegate)属性的 NSManagedObject

编辑 2:

我尝试将 MapStateDB 实体的类更改为 FooMapState:

enter image description here

我使用 Xcode 创建了子类 NSManagedObject,它创建了 FooMapState.h/.m 文件(而不仅仅是 MapState.h/.m 文件):

@interface FooMapState : NSManagedObject

@end

FooMapState 和 MapState 完全相同,只是名称不同。它们都是 NSManagedObject 的子类,这使得创建委托(delegate)变得困难(回到我发布的原始问题)。

最佳答案

您遇到问题是因为您正在尝试创建实体 MapState 的实例,但是您的数据模型中没有这样的实体——实体名称是 MapStateDB.

拥有 MapState 子类是可以的,但是为了创建实例才能工作,您需要为数据模型中的实体设置正确的类名。因此,在 MapStateDB 实体上,将类名设置为 MapState(您可以在那里键入任何类名,真的)。然后,当您创建 MapStateDB 实体的新实例时,您将获得 MapState 类的实例。

关于ios - 创建 NSManagedObject 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34049208/

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