使用performSelector:访问BOOL属性

时间:2013-01-22 16:23:24

标签: objective-c cocoa declared-property

我正在使用performSelector:来返回一个id对象,以调用其他几种方法。这些方法的返回类型实际上可以是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

1 个答案:

答案 0 :(得分:9)

如果您只需要获取各种属性的值,请使用键值编码,它会在int的实例中自动包含标量类型,例如BOOLNSNumber。所以你需要的只是以下几行:

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

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