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
[[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.