如何在运行时检查特定实体是否存在属性。我将实现一个名为dateAddStamp的属性,但并非所有实体都具有此属性。这个类将作为其他实体类的基础...所以我想在运行时检查如果我可以调用[self setPrimitiveValue:xxx forKey:xxx]或不... 感谢。
答案 0 :(得分:18)
BOOL hasFoo = [[myObject.entity propertiesByName] objectForKey:@"foo"] != nil;
答案 1 :(得分:7)
in swift
let hasFoo = myObject.entity.propertiesByName.keys.contains("foo")
答案 2 :(得分:3)
为了改善omz的答案,你还应该检查属性是否是属性(而不是名为@“foo”的关系):
BOOL hasFoo = ( [[myObject.entity propertiesByName] objectForKey:@"foo"] != nil
&& ([[[myObject.entity propertiesByName] objectForKey:key] isKindOfClass:[NSAttributeDescription class]]) )
答案 3 :(得分:2)
Swift 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
}