我正在尝试创建一个 CoreData 持久实体。该实体有一些属性,其中之一是非标准属性 state。state 属性是一个指向包含一些属性的 C 结构的指针。这是我的数据模型的样子:
实体:
MDInstance
属性:
- 持续时间:整数 16
- 移动:整数 16
- 名称:字符串
- 状态:可变形。我将 Transformer 设置为 MDStateTransformer。
我生成了我的类并编辑了 state 属性。这是界面的样子:
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "MDState.h" // this is where the State structure is defined
@interface MDInstance : NSManagedObject
@property (nonatomic, retain) NSNumber * duration;
@property (nonatomic, retain) NSNumber * moves;
@property (nonatomic, retain) NSString * name;
@property (nonatomic) State *state; // note that this is a pointer to a struct
@end
这是实现的样子:
#import "MDInstance.h"
@implementation MDGameInstance
@dynamic duration;
@dynamic moves;
@dynamic name;
@synthesize state;
@end
我创建了一个名为 MDStateTransformer 的值转换器。实现这一点(可能)并不重要。可以说我已经allowsReverseTransformation
返回YES
,transformedValueClass
返回[NSValue class]
,并且我已经实施transformedValue:
并且reverseTransformedValue:
最后,我在我的 AppDelegate 中注册了 MDStateTransformer,application:didFinishLaunchingWithOptions:
如下所示:
MDStateTransformer *transformer = [[MDStateTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"MDStateTransformer"];
如果我创建我的 MDInstance 的新实例,设置它的属性 - 包括状态属性 - 然后尝试保存实体,我的转换器永远不会被调用。
我在转换器的 init 方法中设置了一个停止点,它正在被实例化。我放了另一个,transformedValue:
它的功能没有被调用。
但是,如果我更新我的 MDInstance 以使状态属性不是指针,而只是一个状态结构,并且我更新转换器以使用结构而不是指针,transformedValue:
则调用 。
是否可以在作为 ac 结构指针的对象上具有自定义属性?如果是这样,任何想法我做错了什么?