2011-12-06 15 views
7

Cómo comprobar si existe un atributo para una entidad en particular en el tiempo de ejecución. Implementaré una propiedad llamada dateAddStamp, pero no todas las entidades tienen este atributo. Esta clase servirá como base para las clases de otras entidades ... Por eso quiero verificar en tiempo de ejecución si puedo llamar a [self setPrimitiveValue: xxx forKey: xxx] o no ... Gracias.Cómo comprobar si existe un atributo en el tiempo de ejecución en una subclase NSManagedObject

Respuesta

16
BOOL hasFoo = [[myObject.entity propertiesByName] objectForKey:@"foo"] != nil; 
3

el fin de mejorar la respuesta de omz, usted debe también comprobar si la propiedad es un atributo (y no una relación nombrado @ "foo"):

BOOL hasFoo = ([[myObject.entity propertiesByName] objectForKey:@"foo"] != nil 
&& ([[[myObject.entity propertiesByName] objectForKey:key] isKindOfClass:[NSAttributeDescription class]])) 
5

en Swift

let hasFoo = myObject.entity.propertiesByName.keys.contains("foo") 
1

Swift 3.2 Uso contiene control de matriz de claves:

if managedObject.entity.attributeKeys.contains("yourKey") { 
    let value = managedObject.value(forKey: "youreKey") as! ClassName) 

} 

o utilizar si-let:

if let data = managedObject.value(forKey: "youreKey") { 
    let value = data as! ClassName 
} 
Cuestiones relacionadas