如何在NSManagedObject子类上检查运行时是否存在属性

时间:2011-12-06 23:27:27

标签: cocoa-touch cocoa core-data

如何在运行时检查特定实体是否存在属性。我将实现一个名为dateAddStamp的属性,但并非所有实体都具有此属性。这个类将作为其他实体类的基础...所以我想在运行时检查如果我可以调用[self setPrimitiveValue:xxx forKey:xxx]或不... 感谢。

4 个答案:

答案 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
}