【发布时间】:2012-01-14 13:19:36
【问题描述】:
如何在运行时检查特定实体的属性是否存在。我将实现一个名为 dateAddStamp 的属性,但并非所有实体都具有此属性。这个类将作为其他实体类的基础......所以我想在运行时检查我是否可以调用 [self setPrimitiveValue:xxx forKey:xxx]...... 谢谢。
【问题讨论】:
标签: cocoa-touch cocoa core-data
如何在运行时检查特定实体的属性是否存在。我将实现一个名为 dateAddStamp 的属性,但并非所有实体都具有此属性。这个类将作为其他实体类的基础......所以我想在运行时检查我是否可以调用 [self setPrimitiveValue:xxx forKey:xxx]...... 谢谢。
【问题讨论】:
标签: cocoa-touch cocoa core-data
BOOL hasFoo = [[myObject.entity propertiesByName] objectForKey:@"foo"] != nil;
【讨论】:
迅速
let hasFoo = myObject.entity.propertiesByName.keys.contains("foo")
【讨论】:
为了改进 omz 的答案,您还应该检查属性是否是属性(而不是名为 @"foo" 的关系):
BOOL hasFoo = ( [[myObject.entity propertiesByName] objectForKey:@"foo"] != nil
&& ([[[myObject.entity propertiesByName] objectForKey:key] isKindOfClass:[NSAttributeDescription class]]) )
【讨论】:
斯威夫特 3.2 使用包含键数组的检查:
if managedObject.entity.attributeKeys.contains("yourKey") {
let value = managedObject.value(forKey: "youreKey") as! ClassName)
}
或使用 if-let :
if let data = managedObject.value(forKey: "youreKey") {
let value = data as! ClassName
}
【讨论】: