谁能告诉我如何“隐藏”标准核心数据 setter ?
我知道在 Objective-C 中并没有真正定义“私有(private)”方法的方法,但阅读了有关使用扩展来实现类似结果的内容。问题是,我想将其应用于核心数据类。我想隐藏为某些属性创建的标准 setter ,并且只从其他公开的 setter 中调用它们。
示例:我的核心数据对象有一个 BOOL“已收集”和一个日期“dateCollected”。我已经想出如何将 setDateCollected 添加到 setCollected,但现在我想“隐藏”收集的集合,这样就不能那么容易地直接调用它(当我可能忘记手动设置 dateCollected 时)。
澄清一下,让我感到困惑的部分是“@dynamic”调用 - 我不知道它们应该放在哪里。
编辑 - 我想我错过了一部分。我可以将 @property 声明移动到实现文件中就好了。但我希望 setter 被隐藏,而 getter 保持公开。我想我需要替换 @property,但我不知道如何为核心数据对象执行此操作。
最佳答案
您尝试做的事情不太可能带来好的结果。核心数据类非常精细地设置了图形层次结构,属性实现位于父类(super class)中。也许您应该取消收集的变量,然后对 dateCollected 进行 nil 检查。另一种稍微复杂的方法是将其从数据模型中删除并使其成为常规 ivar。
编辑:好的,我查看了您评论中的信息。它确实建议您在遵守某些准则的情况下可以覆盖实现。但是,下面的答案可能更好。将属性移动到私有(private)接口(interface)。然后在返回私有(private)属性值的公共(public)接口(interface)(只读)中声明另一个属性;)。
关于objective-c - 核心数据方法的类扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985401/