问题
When accessing the inner structure of a subclass of NSManagedObject using a Mirror, all managed variables are ignored.
public class Foo: NSManagedObject {
@NSManaged var bar: String?
}
var f: Foo = ...
// ... creating a Foo in a valid context ...
let mirror = Mirror(reflecting: f)
for c in mirror.children { // children count == 0
print("\(c.label!):\(c.value)") // never executed
}
How can reflection mechanisms used on NSManagedObjects.
回答1:
The accessor methods for Core Data properties are synthesized dynamically at runtime.
You can enumerate the attributes of a Core Data entity using
the entity
property of NSManagedObject
which is a NSEntityDescription
and has a attributesByName
property.
A simple example:
for (name, attr) in newManagedObject.entity.attributesByName {
let attrType = attr.attributeType // NSAttributeType enumeration for the property type
let attrClass = attr.attributeValueClassName ?? "unknown"
print(name, "=", newManagedObject.valueForKey(name), "type =", attrClass)
}
来源:https://stackoverflow.com/questions/34411934/swift-reflecting-properties-of-subclass-of-nsmanagedobject