如何从选择器(从字符串)调用对象的方法并获取该方法的返回值(无论是什么类型)?

 逝去似水流年 发布于 2023-02-13 16:49

好的,这就是我所拥有的:

SEL propertySelector = NSSelectorFromString(keyPath);
if ([obj respondsToSelector:propertySelector]){
    id propertyValue = [obj performSelector:propertySelector];
}

所以,它keyPath是a NSString,它用于传递方法的字符串名称.之后,我@selector使用该字符串创建一个,NSSelectorFromString()然后检查object(obj)是否响应该选择器.
但现在这里的问题,我想,我想调用的方法的返回值,但它似乎像上面的代码不一样类型的值工作int,NSInteger等等.因为我使用idpropertyValue(如果我在另一个方法的中间调用上面的方法,并且keyPath引用一个返回int的方法,则第一个方法将停止执行).

无论什么类型,我怎样才能收到方法的价值?
谢谢!

1 个回答
  • 如果您正在访问某个属性,那么您一定要考虑使用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
    

    2023-02-13 16:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有