如何列出 NSManagedObject 的变量

Posted

技术标签:

【中文标题】如何列出 NSManagedObject 的变量【英文标题】:How to list variables for NSManagedObject 【发布时间】:2015-02-03 14:24:06 【问题描述】:

我需要列出 NSManagedObject 的变量,我知道有一种方法可以使用 How do I list all fields of an object in Objective-C? 中给出的“class_copyIvarList”来完成它

但“class_copyIvarList”不适用于“NSManagedObject”。

这是我正在使用的一段代码,它对“NSObject”工作得非常好,但对“NSManagedObject”却不行:

  unsigned int outCount;
  Ivar *vars = class_copyIvarList([self class], &outCount);
  for (int i = 0; i < outCount; i++) 
    Ivar var = vars[i];
    unsigned int idCount;

    NSLog(@"%s %s", ivar_getName(var), ivar_getTypeEncoding(var));

  
  free(vars);

这有什么问题?

【问题讨论】:

属性对你和 ivars 一样有用吗? 如果您要求 class_copyIvarList 返回 NSObject 的属性,那么是的,它正在返回,但我需要它为 NSManagedObject 工作 使用class_copyPropertyList 可以获得类的属性(甚至是NSManagedObject 的子类) 非常感谢 Moxy,这真的对我有用 【参考方案1】:

我不确定您在这里做什么,但是对于托管对象,通常更典型的是使用 Core Data 自己的内省而不是询问 Objective-C 运行时。在托管对象子类的方法中,您将使用[[self entity] propertiesByName] 来获取由实体类型定义的所有属性和关系的列表。您可以根据需要将该方法替换为attributesByNamerelationshipsByName。可以进一步查询您返回的对象,例如找出属性的类型或关系的目标实体。

【讨论】:

以上是关于如何列出 NSManagedObject 的变量的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NSManagedObject 传递给 NSPredicate 以及如何保存一对多的实体

在 xcode8 中创建 NSManagedObject 类?

核心数据。如何使用在 NSManagedObject 子类中创建的方法

如何向数据模型文件创建的 NSManagedObject 子类添加属性?

如何在多个线程上处理 NSManagedObjectContext 和 NSManagedObject 创建和编辑?

“创建 NSManagedObject 子类”创建 .h 和 .m 而不是 .swift 文件