如何确定NSManagedObject的子类是否在运行时具有特定属性

war*_*enm 3 properties objective-c selector

我习惯于在运行时使用doesRespondToSelector:instancesRespondToSelector:确定对象是否有某些可用的方法.但是,在使用Core Data时,我没有看到我的@dynamic属性的预期行为.例如,如果sortOrder我的类上有属性,我可以使用Objective-C运行时在运行时看到此属性存在.但如果我问相关的Class对象是否instancesRespondToSelector:,我会回来NO.如果我使用运行时枚举可用的方法,我的动态getter/setter都不会出现在列表中,这是一致的,但不是我所期望的.

那么我的问题是:不使用运行时检查,是否有一种简单的方法可以确定NSManagedObject子类的实例是否响应与其@dynamic属性相对应的getter/setter选择器?

Mas*_*ero 12

您可以通过NSEntityDescription检查NSManagmentObject:

- (BOOL)hasPropertyWithName:(NSString *)name
{
    NSEntityDescription *desc = self.entity;
    return [desc.attributesByName objectForKey:name] != nil;
}
Run Code Online (Sandbox Code Playgroud)