菜鸟教程小白 发表于 2022-12-12 10:04:20

ios - 直接在代码中获取/设置属性时,Core Data 不会自动调用值转换器


                                            <p><p>如果我理解正确,Core Data 可转换属性背后的想法是:</p>

<ol>
<li>实现一个 <code>NSValueTransformer</code> 子类并返回 <code>[NSData
<code>+transformedValueClass</code> 中的 class]</code> 及其实现
转型</li>
<li>在 <code>+load</code> 或 <code>+initialize</code></li> 中注册转换器
<li>将实体的属性设置为可变形</li>
<li>为您的转换器设置一个名称(您用于注册它的名称)
在属性的 xcode 模型编辑器中。</li>
</ol>

<p>此时,我希望访问或设置适当实体类型的 managedObject 中的属性会触发值转换器。但是,我在使用 <code>AFIncrementalStore</code> 的应用程序中对此进行测试,我得到以下行为:</p>

<ul>
<li>A - 在 <code>+load</code> 或 <code>+initialize</code> 中注册转换器不会
似乎有必要;无论如何,Core Data 都能找到它(尽管请提前阅读)。</li>
<li>B - 通过 <code>AFIncrementalStore</code> 获取请求确实会触发
变压器。例如,我从 fetch 请求中获取 JSON,然后
将响应字典映射到 managedObject 时,
变压器被触发并转换适当的字典键
到对象中的 <code>NSData</code>。</li>
<li>C - 但是,如果我尝试通过代码设置或获取属性,则
不叫变压器。那是在做类似的事情
<code>myManagedObject.myAttribute = @"hello"</code> 不会触发
从 <code>NSString</code> 到 <code>NSData</code> 的转换,<code>NSString 也没有
*myString = myManagedObject.myAttribute</code> 触发从 <code>NSData</code> 到 <code>NSString</code> 的转换。</li>
</ul>

<p>那么我错过了什么?我认为这个想法是 CoreData 会自动调用转换器。我错了吗?</p>

<p>根据这个问题:<a href="https://stackoverflow.com/questions/1598600/why-is-my-transformable-core-data-attribute-not-using-my-custom-nsvaluetransform" rel="noreferrer noopener nofollow">Why is my transformable Core Data attribute not using my custom NSValueTransformer?</a>
这似乎是 Apple 框架中的一个错误。但是让我失望的是,通过 AFIncrementalStore 确实调用了值转换器。也许关键是通过代码设置一个属性,我并没有真正触发 AFIncrementalStore,所以更改只是在内存中?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><em>(来自上面的评论:)</em> 当您<em>保存</em>上下文时,会调用逆变器,
不是在设置属性时。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 直接在代码中获取/设置属性时,Core Data 不会自动调用值转换器,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15861892/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15861892/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 直接在代码中获取/设置属性时,Core Data 不会自动调用值转换器