Core Data实体中的可转换属性是否可以指向c结构?我的变压器没有被调用

时间:2013-01-14 14:45:21

标签: objective-c core-data pointers struct nsvaluetransformer

我正在尝试创建一个CoreData持久化实体。该实体具有一些属性,其中一个属性是非标准属性state。 state属性是指向C结构的指针,其中包含一些属性。这是我的数据模型的样子:

实体:

MDInstance

属性:

  • 持续时间:整数16
  • 移动:整数16
  • name:String
  • 状态:可转换。我将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返回YEStransformedValueClass返回[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结构的指针?如果是这样,任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的transformable属性也需要在实现文件中指定为@dynamic而不是@synthesize。通过合成该属性,您可以在核心数据之外提供getter和setter,因此不会使用Core Data提供的访问器。