好的,这就是我所拥有的:
SEL propertySelector = NSSelectorFromString(keyPath); if ([obj respondsToSelector:propertySelector]){ id propertyValue = [obj performSelector:propertySelector]; }
所以,它keyPath
是a NSString
,它用于传递方法的字符串名称.之后,我@selector
使用该字符串创建一个,NSSelectorFromString()
然后检查object(obj
)是否响应该选择器.
但现在这里的问题,我想,我想调用的方法的返回值,但它似乎像上面的代码不一样类型的值工作int
,NSInteger
等等.因为我使用id
的propertyValue
(如果我在另一个方法的中间调用上面的方法,并且keyPath
引用一个返回int的方法,则第一个方法将停止执行).
无论什么类型,我怎样才能收到方法的价值?
谢谢!
如果您正在访问某个属性,那么您一定要考虑使用KVC,它可以NSNumber
为您提供基元.
NSInteger val = [[obj valueForKeyPath:keyPath] integerValue];
至于你的文字问题,performSelector:
文档会告诉你该怎么做.
对于返回除对象以外的任何内容的方法,请使用
NSInvocation
.
看起来像这样:
NSInteger retVal; SEL sel = NSSelectorFromString(keyPath); NSMethodSignature * sig = [obj methodSignatureForSelector:sel]; NSInvocation * inv = [NSInvocation invocationWithMethodSignature:sig]; [inv setTarget:obj]; [inv setSelector:sel]; [inv invoke]; [inv getReturnValue:&retVal]; // Use retVal