Cocoa - 在运行时确定类的属性

Gee*_*esu 2 xcode cocoa objective-c

这很简单吗?我实际上是想监视对象是否发生变化(以确定是否应该保存它).目前我只在对象中有一个数组,列出了所有的readwrite属性,然后在创建对象后循环遍历它并添加观察者:

for ( NSString *observer in _observers ){
    [self addObserver: self forKeyPath: observer options: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context: nil];
}
Run Code Online (Sandbox Code Playgroud)

它可以工作,但是如果你忘了向数组中添加一个属性,显然不会调用观察者.有谁知道如何在运行时确定对象的属性?我当时认为它可能是在响应的选择器:但我还没有找到关于这个主题的更多信息.

提前致谢!

Mar*_*aev 6

对象的属性在合成后,其行为几乎与普通对象的方法相同,因此您可以执行以下检查

if ([myObject respondsToSelector: @selector(propertyName)]) {
    // your code here
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想使用字符串作为选择器的名称:

if ([myObject respondsToSelector: NSSelectorFromString(@"propertyName")]) {
    // your code here
}
Run Code Online (Sandbox Code Playgroud)

propertyName是一个getter(它的签名名称与您声明的属性名称完全对应),因此如果要检查setter的存在,则应添加其他表达式:

[myObject respondsToSelector: @selector(setPropertyName:)])
Run Code Online (Sandbox Code Playgroud)