这是我的NSValueTransformer实现
+ (Class)transformedValueClass {
return [NSData class];
}
+ (BOOL)allowsReverseTransformation {
return YES;
}
- (id)transformedValue:(id)value {
// some implementation, there is breakpoint
}
- (id)reverseTransformedValue:(id)value {
// some implementation, there is breakpoint
}我在运行时注册它
EncryptionTransformer *transformer = [[EncryptionTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"EncryptionTransformer"];我把我的领域标记为可转换

在我的MO里有一项财产
@property (nonatomic, strong) NSData *someData;
@dynamic someData;我做错什么了?不叫transformedValue。
发布于 2014-08-25 13:02:21
我在上面的评论中对你的问题作了一些假设。我在测试示例中复制了您的设置,发现如下:
EncryptionTransformer *transformer = [[EncryptionTransformer alloc] init]; [NSValueTransformer setValueTransformer:transformer forName:@"EncryptionTransformer"];那样在运行时设置值转换器。-(id)transformedValue:之后调用实际值变压器的转换方法-[NSManagedObjectContext save:]NSManagedObjectContext没有直接连接到持久存储协调器(在MagicalRecord或RestKit等框架中提供的流行方法),则-(id)transformedValue:不会在-[NSManagedObjectContext save:]之后调用。它只在上下文上的-[NSManagedObjectContext save:]之后调用,后者直接连接到持久存储协调器。-(id)reverseTransformedValue:(id)value,类似的规则是真的,只有在从持久存储协调器获取之后才调用它。简单的代码(我使用您的设置):
char *data = "abc";
NSManagedObjectContext *moc =
[(TCDAppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];
Event *event = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Event class]) inManagedObjectContext:moc];
event.timeStamp = [NSDate date];
event.myData = [NSData dataWithBytes:data length:4]; // no call to -(id)transformedValue:
[moc save:nil]; // called -(id)transformedValue:https://stackoverflow.com/questions/25481104
复制相似问题