objective-c - 使用 performSelector : to access BOOL property

标签 objective-c cocoa declared-property

我正在使用返回 id 对象的 performSelector: 来调用其他几个方法。这些方法的返回类型实际上可以是 BOOLintNSDate 或任何其他类型的对象。

如何确定从 performSelector: 返回的对象是否为 BOOL? 我尝试将其转换为 NSNumber 等,但如果对象不是 BOOL,则会崩溃。

我有一个具有如下属性的类:

@property(retain,nonatomic) NSString* A;
@property(assign,nonatomic) BOOL B;
@property(retain,nonatomic) NSArray* C;
@property(assign,nonatomic) int64_t D;

这个类是由一个框架生成的,所以我不能改变它。但我想遍历 ABCD 来调用每个属性并检索数据。但是,如您所见,返回类型可能会有所不同,我需要对此进行调整。

我正在做类似的事情:

SEL s = NSSelectorFromString(@"A");
id obj = [object performSelector:s];
//check if obj is BOOL
//do something with obj

最佳答案

如果您需要做的只是获取各种属性的值,请使用键值编码,它会在实例中自动包装标量类型,例如 intBOOL NS 编号。所以你只需要像下面这样一行:

id value = [object valueForKey:@"somePropertyName"];

否则,您可以通过在目标对象上调用 methodSignatureForSelector: 来提前检查返回类型,但鉴于您所描述的情况,这似乎是一堆不必要的工作。

关于objective-c - 使用 performSelector : to access BOOL property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14463220/

相关文章:

objective-c - 获取字符串形式的属性名称

objective-c - 键值编码是否支持声明的属性的自定义访问器名称?

iphone - 在 iPhone 中使用 Phonegap 拨号

ios - 具有多个属性的 NSMutableArray

ios - CLGeoCoder 不返回当前位置的确切数据

macos - NSFilehandle Swift

objective-c - NS复制: Use of "zone"

ios - 分配并初始化 destinationViewController

objective-c - NSTimer 不会在指定日期被解雇

objective-c - 是否有覆盖属性的模式?