objective-c - 核心数据方法的类扩展

标签 objective-c ios core-data

谁能告诉我如何“隐藏”标准核心数据 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/

相关文章:

iphone - 在图库中显示一些缩放图像

iphone - persistentstorecoordinator sqlite 错误代码 :522 'not an error'

ios - 需要有关 viewDidLayoutSubviews 的帮助

ios - 使用 FRC Swift 3 更改 CoreData 后,TableView 不会更新(reloadData)

cocoa - 一键发送多个操作?

objective-c - 在 swift 插件中添加 Objective-C 文件时,Xcode pluginDidLoad 未被调用

ios - 为什么导航 Controller 在 - (BOOL)shouldPerformSegueWithIdentifier : is implemented? 时不工作

ios - 收到通知时播放声音在开发中有效但在生产中无效

ios - UITextField 选中时清除,但如果没有输入也恢复数据

ios - Safari 和 iOS 上的 Html5(音频)