objective-ciosrespondstoselectordynamic-properties

Objective C - respondsToSelector for dynamic properties


I am currently facing the problem to check whether a property of an Object (NSManagedObject) exists or not.

Unfortunately the method

[[MyObject class] respondsToSelector:@selector(myProperty)];

always returns NO.

I think it's because the property generated by CoreData is a new style property ala

@property (nonatomic, strong) NSString *myProperty

So any ideas how to solve this issue?

I would really appreciate all of your suggestions ;)

Thanks in advance! Alex


Solution

  • [[MyObject class] respondsToSelector:...] asks whether the metaobject responds to that selector. So, in effect, it asks whether there is a class method with that selector. Your code would return YES if you had:

    + (NSString *)myProperty;
    

    It returns NO because you have the equivalent of the instance method:

    - (NSString *)myProperty;
    

    You need to call respondsToSelector: on an instance of your class.

    You could normally use instancesRespondToSelector: directly on the metaclass (so, [MyObject instancesRespondToSelector:...]) but Core Data synthesises the relevant method implementations only when you create an object, so that's a non-starter. You could however create an instance via the normal NSEntityDescription route and test respondsToSelector: on that.

    Since it's all Core Data, an alternative would be to ask the NSManagedObjectModel for the relevant NSEntityDescription via its entitiesByName dictionary and inspect the entity description's propertiesByName dictionary.