如果我理解正确,Core Data 可转换属性背后的想法是:
- 实现一个
NSValueTransformer 子类并返回 [NSData
+transformedValueClass 中的 class] 及其实现
转型
- 在
+load 或 +initialize 中注册转换器
- 将实体的属性设置为可变形
- 为您的转换器设置一个名称(您用于注册它的名称)
在属性的 xcode 模型编辑器中。
此时,我希望访问或设置适当实体类型的 managedObject 中的属性会触发值转换器。但是,我在使用 AFIncrementalStore 的应用程序中对此进行测试,我得到以下行为:
- A - 在
+load 或 +initialize 中注册转换器不会
似乎有必要;无论如何,Core Data 都能找到它(尽管请提前阅读)。
- B - 通过
AFIncrementalStore 获取请求确实会触发
变压器。例如,我从 fetch 请求中获取 JSON,然后
将响应字典映射到 managedObject 时,
变压器被触发并转换适当的字典键
到对象中的 NSData 。
- C - 但是,如果我尝试通过代码设置或获取属性,则
不叫变压器。那是在做类似的事情
myManagedObject.myAttribute = @"hello" 不会触发
从 NSString 到 NSData 的转换,NSString 也没有
*myString = myManagedObject.myAttribute 触发从 NSData 到 NSString 的转换。
那么我错过了什么?我认为这个想法是 CoreData 会自动调用转换器。我错了吗?
根据这个问题:Why is my transformable Core Data attribute not using my custom NSValueTransformer?
这似乎是 Apple 框架中的一个错误。但是让我失望的是,通过 AFIncrementalStore 确实调用了值转换器。也许关键是通过代码设置一个属性,我并没有真正触发 AFIncrementalStore,所以更改只是在内存中?
Best Answer-推荐答案 strong>
(来自上面的评论 当您保存上下文时,会调用逆变器,
不是在设置属性时。
关于ios - 直接在代码中获取/设置属性时,Core Data 不会自动调用值转换器,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/15861892/
|