0

我正在尝试创建一个 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返回YEStransformedValueClass返回[NSValue class],并且我已经实施transformedValue:并且reverseTransformedValue:

最后,我在我的 AppDelegate 中注册了 MDStateTransformer,application:didFinishLaunchingWithOptions:如下所示:

MDStateTransformer *transformer = [[MDStateTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"MDStateTransformer"];

如果我创建我的 MDInstance 的新实例,设置它的属性 - 包括状态属性 - 然后尝试保存实体,我的转换器永远不会被调用。

我在转换器的 init 方法中设置了一个停止点,它正在被实例化。我放了另一个,transformedValue:它的功能没有被调用。

但是,如果我更新我的 MDInstance 以使状态属性不是指针,而只是一个状态结构,并且我更新转换器以使用结构而不是指针,transformedValue:则调用 。

是否可以在作为 ac 结构指针的对象上具有自定义属性?如果是这样,任何想法我做错了什么?

4

1 回答 1

1

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

于 2013-01-14T19:04:59.990 回答