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