10 Stimmen

So prüfen Sie, ob ein Attribut zur Laufzeit in einer NSManagedObject-Unterklasse vorhanden ist

Wie wird geprüft, ob ein Attribut für eine bestimmte Entität zur Laufzeit existiert? Ich werde eine Eigenschaft namens dateAddStamp implementieren, aber nicht alle Entitäten haben dieses Attribut. Diese Klasse wird als Basis für andere Entitätsklassen dienen... Ich möchte also zur Laufzeit prüfen, ob ich [self setPrimitiveValue:xxx forKey:xxx] aufrufen kann oder nicht... Danke!

21voto

omz Punkte 52865
BOOL hasFoo = [[myObject.entity propertiesByName] objectForKey:@"foo"] != nil;

10voto

techloverr Punkte 2579

In Windeseile

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

3voto

RP Development Punkte 120

Um die Antwort von omz zu verbessern, sollten Sie auch prüfen, ob die Eigenschaft ein Attribut ist (und nicht eine Beziehung mit dem Namen @"foo"):

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

3voto

Jeba Moses Punkte 709

Swift 3.2 Use contains check from array of keys:

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

}

oder if-let verwenden:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X