我正在尝试创建一个CoreData持久化实体。该实体具有一些属性,其中一个属性是非标准属性state。 state属性是指向C结构的指针,其中包含一些属性。这是我的数据模型的样子:
实体:
MDInstance
属性:
我生成了我的类并编辑了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的application:didFinishLaunchingWithOptions:
中注册了MDStateTransformer,如下所示:
MDStateTransformer *transformer = [[MDStateTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"MDStateTransformer"];
如果我创建了我的MDInstance的新实例,设置它的属性 - 包括state属性 - 然后尝试保存实体,我的变换器永远不会被调用。
我在变换器的init方法中设置了一个停止点,并且它正在被实例化。我把另一个放在transformedValue:
中,并且没有调用该函数。
但是,如果我更新我的MDInstance以使state属性不是指针,而只是一个State结构,并且我更新变换器以使用结构而不是指针,则调用transformedValue:
是否可以在对象上设置自定义属性,该对象是指向c结构的指针?如果是这样,任何想法我做错了什么?
答案 0 :(得分:1)
您的transformable属性也需要在实现文件中指定为@dynamic
而不是@synthesize
。通过合成该属性,您可以在核心数据之外提供getter和setter,因此不会使用Core Data提供的访问器。