自定义Getter for Core Data属性

时间:2013-02-27 20:44:36

标签: ios objective-c cocoa-touch cocoa core-data

我在我的应用程序中引入了一个软删除模式。我将把它们标记为“已删除”,而不是从我的上下文中删除对象。我将使用(软)删除配方中的成分的例子。

我有许多地方要求食谱的成分。如果可能的话,我想避免更新所有这些(并且有可能丢失一个)。相反,我可以重新定义配方类的ingredients getter,在那里我将过滤掉软删除的对象吗?

我需要完整的成分列表(包括软删除)的少数情况将使用新属性,如ingredientsIncludingDeleted

这合理吗?使用自定义getter是否有任何明显的副作用,除了返回预期之外还会做什么?我应该注意哪些具体的核心数据?

1 个答案:

答案 0 :(得分:5)

是的,你可以这样做。但是,您的方法是向后做。 默认的getter不应该有任何谓词。它应该完全按照它所暗示的方式执行,这是一个未过滤的结果集。想想有人在6个月后阅读你的代码。他们会知道“成分”实际上意味着“过滤成分”吗?否。

因此,不要改变默认 getter的含义,而是创建一个新的getter(命名为“filteredIngredients”,并在任何地方使用它。这是正确的长期解决方案。

如果您担心在某些地方忘记更改房产,请执行此操作:暂时将您的食材吸气剂重命名为其他内容,例如“tempIngredients”。这会在使用它的任何地方导致编译器错误。使用适当的getter修复所有这些编译器错误,然后将默认getter重命名为“ingredients”。

希望这有帮助。