我想测试一个对象在iPhone SDK中是否有可写的@property.
一种可能的方法是判断-valueForKey:method,但这似乎很不雅观!
例子:
@try {
id *value = [instance valueForKey:@"myProperty"];
}
@catch (NSException * e) {
// Key did not exist
}
有更好的方法吗?
我想测试一个对象在iPhone SDK中是否有可写的@property.
一种可能的方法是判断-valueForKey:method,但这似乎很不雅观!
例子:
@try {
id *value = [instance valueForKey:@"myProperty"];
}
@catch (NSException * e) {
// Key did not exist
}
有更好的方法吗?
如果要创建要判断的对象,可以重写valueForUndefinedKey:
和setValue:forUndefinedKey
,以执行比引发异常更有用的操作.
另一方面,如果您试图在运行时内省不知道的对象,则必须使用运行时方法来实现这一点.您可以使用Objut-C运行时本身,并调用class_copyPropertyList
或protocol_copyPropertyList
,并处理这些,或者在KVC吸收器/设置器上为对象提供基础和调用respondsToSelector
,例如,对于属性foo
,您可以调用类似于[someObject respondsToSelector:NSSelectorFromString(@"foo")];
的属性.