如何列出 NSManagedObject 的变量
How to list variables for NSManagedObject
我需要列出 NSManagedObject 的变量,我知道有一种方法可以使用 "class_copyIvarList" 来完成,如 How do I list all fields of an object in Objective-C?
但是 "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);
有什么问题吗?
我不确定你在这里做什么,但是对于托管对象,使用 Core Data 自己的内省通常比询问 Objective-C 运行时更为典型。在托管对象子类的方法中,您将使用 [[self entity] propertiesByName]
来获取实体类型定义的所有属性和关系的列表。您可以根据需要用 attributesByName
或 relationshipsByName
替换该方法。您返回的对象可以进一步查询,例如找出 属性 的类型或关系的目标实体。
我需要列出 NSManagedObject 的变量,我知道有一种方法可以使用 "class_copyIvarList" 来完成,如 How do I list all fields of an object in Objective-C?
但是 "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);
有什么问题吗?
我不确定你在这里做什么,但是对于托管对象,使用 Core Data 自己的内省通常比询问 Objective-C 运行时更为典型。在托管对象子类的方法中,您将使用 [[self entity] propertiesByName]
来获取实体类型定义的所有属性和关系的列表。您可以根据需要用 attributesByName
或 relationshipsByName
替换该方法。您返回的对象可以进一步查询,例如找出 属性 的类型或关系的目标实体。