gpt4 book ai didi

ios - 无法在 NSValueTransformer 中调用 transformedValue

转载 作者:行者123 更新时间:2023-11-28 21:59:20 27 4
gpt4 key购买 nike

这是我对 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"];

我将我的字段标记为Transformable

enter image description here

我的MO里有一个属性

@property (nonatomic, strong) NSData *someData;

@dynamic someData;

我做错了什么? transformedValue 未被调用。

最佳答案

我在上面的评论中对您的问题做了一些假设。我在测试示例中重现了您的设置并发现以下内容:

  1. 您的设置是正确的 - 并且不需要像在运行时那样设置值转换器EncryptionTransformer *transformer = [[EncryptionTransformer alloc] init];
    [NSValueTransformer setValueTransformer:transformer forName:@"EncryptionTransformer"];
  2. 实际值转换器的转换方法-(id)transformedValue:-[NSManagedObjectContext save:]之后调用
  3. 此外,如果您 NSManagedObjectContext 没有直接连接到持久存储协调器(流行的方法在 MagicalRecord 或 RestKit 等框架中提供开箱即用)-(id)transformedValue: 不会在 -[NSManagedObjectContext save:] 之后调用。它仅在 -[NSManagedObjectContext save:] 之后在直接连接到持久存储协调器的上下文中调用。
  4. 对于 -(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:

关于ios - 无法在 NSValueTransformer 中调用 transformedValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25481104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com