objective-c - Objective-C - 动态属性的 respondsToSelector

标签 objective-c ios respondstoselector dynamic-properties

我目前面临检查对象 (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/

相关文章:

iphone - 使用#DEFINE共享托管对象上下文

ios - UIImageView 的双色边框

ios - Firebase 通知未在 App 非事件状态下接收?

iphone - 有人可以将从应用商店下载的 ipa 重新分发给越狱用户吗?

ios - 更改绑定(bind)到 MFMessageComposeViewController 中发送按钮的操作

objective-c - objectAtIndexedSubscript 在 IOS5 中可用吗?

ios - iOS 7 的 UISplitViewController "ViewIdentifier was not found in Storyboard"错误

objective-c - respondsToSelector - 不工作

objective-c - 使用 respondsToSelector 的性能损失