Objective C - respondsToSelector用于动态属性

Ale*_*der 4 objective-c ios dynamic-properties respondstoselector

我目前面临的问题是检查对象(NSManagedObject)的属性是否存在.

不幸的是方法

[[MyObject class] respondsToSelector:@selector(myProperty)];
Run Code Online (Sandbox Code Playgroud)

总是返回NO.

我认为这是因为CoreData生成的属性是一个新的样式属性ala

@property (nonatomic, strong) NSString *myProperty
Run Code Online (Sandbox Code Playgroud)

那么任何想法如何解决这个问题?

我非常感谢你的所有建议;)

提前致谢!亚历克斯

Tom*_*mmy 15

[[MyObject class] respondsToSelector:...]询问元对象是否响应该选择器.因此,实际上,它询问是否存在具有该选择器的类方法.如果您有以下代码,您的代码将返回YES:

+ (NSString *)myProperty;
Run Code Online (Sandbox Code Playgroud)

它返回NO,因为您具有等效的实例方法:

- (NSString *)myProperty;
Run Code Online (Sandbox Code Playgroud)

你需要调用respondsToSelector:你班级的一个实例.

您通常可以instancesRespondToSelector:直接在元类上使用(所以[MyObject instancesRespondToSelector:...]),但Core Data仅在您创建对象时才合成相关的方法实现,因此这是一个非启动器.但是,您可以通过正常NSEntityDescription路由创建实例并对其进行测试respondsToSelector:.

由于它是所有核心数据,另一种方法是通过其字典询问NSManagedObjectModel相关内容并检查实体描述的字典.NSEntityDescriptionentitiesByNamepropertiesByName