Hoe te controleren of een kenmerk tijdens runtime bestaat op een NSManagedObject-subklasse

Hoe te controleren of een attribuut bestaat voor een bepaalde entiteit tijdens runtime. Ik zal een eigenschap met de naam dateAddStamp implementeren, maar niet alle entiteiten hebben dit kenmerk. Deze klasse zal dienen als basis voor klassen van andere entiteiten ... Dus ik wil tijdens runtime controleren of ik [self setPrimitiveValue: xxx forKey: xxx] kan bellen of niet ... Bedankt.

7

4 antwoord

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

in snel

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

Om het antwoord van omz te verbeteren, moet je ook controleren of de eigenschap een attribuut is (en niet een relatie genaamd @ "foo"):

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

Swift 3.2 Use contains check from array of keys:

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

}

of gebruik if-let:

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