我目前面临检查对象 (NSManagedObject) 的属性是否存在的问题。
不幸的是方法
[[MyObject class] respondsToSelector:@selector(myProperty)];
总是返回NO。
我想是因为CoreData生成的属性是一个新的样式属性ala
@property (nonatomic, strong) NSString *myProperty
那么有什么解决这个问题的想法吗?
非常感谢您的所有建议;)
提前致谢! 亚历克斯
最佳答案
[[MyObject class] respondsToSelector:...]
询问元对象是否响应该选择器。因此,实际上,它会询问是否存在带有该选择器的类方法。如果您有以下情况,您的代码将返回 YES:
+ (NSString *)myProperty;
它返回 NO 因为你有实例方法的等价物:
- (NSString *)myProperty;
您需要在您的类的实例上调用 respondsToSelector:
。
您通常可以直接在元类上使用 instancesRespondToSelector:
(因此,[MyObject instancesRespondToSelector:...]
)但是 Core Data 仅当您使用时才合成相关的方法实现创建一个对象,所以这是不可能的。但是,您可以通过正常的 NSEntityDescription
路由创建一个实例并在其上测试 respondsToSelector:
。
因为它都是核心数据,另一种方法是通过 entitiesByName
字典向 NSManagedObjectModel
询问相关的 NSEntityDescription
并检查实体描述的 propertiesByName
字典。
关于objective-c - Objective-C - 动态属性的 respondsToSelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9003690/