Swift: Reflecting properties of subclass of NSManagedObject

夙愿已清 提交于 2019-12-06 02:44:54

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!