gpt4 book ai didi

ios - 如何在 mogenerator 中使用类型安全的结构类型核心数据属性?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:53:27 24 4
gpt4 key购买 nike

对于 NSKeyValueCoding 可以处理的结构类型的属性,我使用了 Apple 文档中描述的核心数据访问器模式 here .

例如,NSRange 结构可以在 Core Data 模型中指定为 Transformable 类型,然后可以通过在 NSManagedObject 子类中提供以下形式的访问器来为客户端避免 NSValue 的冗长代码:

接口(interface):

@property(assign, nonatomic) NSRange range;

实现;

- (NSRange) range {

[self willAccessValueForKey:@"range"];
NSRange retVal = range;
[self didAccessValueForKey:@"range"];

return retVal;
}

- (void)setRange:(NSRange)aRange {

[self willChangeValueForKey:@"range"];
range = aRange;
[self didChangeValueForKey:@"range"];
}

然而,Mogenerator 生成的 NSManagedObject 子类将 Transformable 属性声明为 NSObject 属性,因此客户端需要获取/设置 NSValues。

使用 mogenerator 处理这种情况的最佳方法是什么,同时 (1) 保持简单的 Transformable 模式而不是弄乱 transient 支持属性,以及 (2) 避免对 Mogenerator 的“机器”类进行任何编辑?

最佳答案

处理这个问题的 final方法是,正如 scc 在先前接受的答案中所建议的那样,更改 mogenerator 模板文件。他们需要 (a) 将可转换属性的访问器更改为适当的类型(在本例中为 NSRange),然后 (b) 使用适当的 KVO 方法调用添加访问器。

由于我现在没有时间弄清楚该怎么做,我的临时权宜之计如下:

  • 将 attributeValueClassName 键添加到属性的 userInfo 字典(在 Core Data 编辑器中),值为 NSValue(只是为了确保生成器的访问器是 NSValue 而不是 NSObject)。
  • 在人工可编辑的 mogenerator 输出中,添加与问题中的访问器类似的访问器,但使用新名称(例如 rangeValue 和 setRangeValue)。底层值仍然是持久化的 NSValues,但我的访问器负责 KVO 和装箱/拆箱。

不太理想,但我确实获得了强类型访问器,而无需编辑 mogenerator 机器文件。

关于ios - 如何在 mogenerator 中使用类型安全的结构类型核心数据属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9304538/

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