有没有办法直接从相应NSManagedObject
的属性中检索核心数据实体属性的键?这将消除在某些情况下依赖基于字符串("字符串类型"(代码的需要,从而降低出错的风险。
例如,我想替换以下内容:
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "createdDate", ascending: false)]
。还有这样的东西:
fetchRequest.sortDescriptors = [NSSortDescriptor(key: exampleNSManagedObject.createdDate.key, ascending: false)]
我知道.defaultSortDescriptors
可以用来实现其中的一些,但仅限于固定属性。我也知道.entity.attributesByName.keys
可以用来获取密钥列表,但我还没有建立一种自动隔离相关密钥的方法。
#keyPath 字符串表达式是您要查找的吗? 从文档中:
您可以使用 #keyPath 字符串表达式创建编译器检查的密钥和可由 KVC 方法使用的密钥路径
例如:
fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(ExampleNSManagedObject.createdDate), ascending: false)]
好吧,当然,您可以编写一个包含函数的扩展NSManagedObject
,该函数将接受人类编写的字符串并返回.entity.attributesByName.keys
中的最佳匹配,这将解决您所说的问题。
但更好的方法是使用一个工具,该工具将从您的数据模型自动生成此类键常量。 查看mogenerator,这是内置于Xcode中的核心数据代码生成的开源"专业"替代品。 它的功能之一是为每个实体生成一个这样的枚举:
public enum MyEntityAttributes: String {
case createdDate = "createdDate"
case foo = "foo"
case bar = "bar"
}
然后可以MyEntityAttributes.foo
访问所需的密钥字符串。