将方法名称作为objective-c参数传递?

时间:2014-05-24 22:02:50

标签: objective-c methods arguments restkit

更新:我知道我的解决方案不起作用。我正在寻找另一种方法来解决这个问题:)

代码: public gist

我正在尝试创建一个API类,为restkit构建一些常用的方法,这样我就可以重用相同的代码来将对象和POST,GET或PUT映射到我的Web API。实例化API类时,我调用responseDescriptorWithMapping,并传递一系列参数,如下所示。

这个工作正常,直到我尝试将方法名称作为参数传递。

例如:

_api = [[snapApi alloc] initWithconfigureRestKit:[Profile class] objectMapping:@{ @"_id": @"_id", @"headline": @"headline" } httpMethod:@"RKRequestMethodPOST"];

我在运行时看到此警告和后续失败:

Incompatible pointer to integer conversion sending '__strong id' to parameter of type 'RKRequestMethod' (aka 'enum RKRequestMethod')

restkit方法被定义为采用RKRequestMethod类的对象。是否可以使用objective-c将方法名称(以字符串的形式)作为函数的参数传递?如果不是,我怎么能动态地做到这一点?

(instancetype)responseDescriptorWithMapping:(RKMapping *)mapping
                                   method:(RKRequestMethod)method
                              pathPattern:(NSString *)pathPattern
                                  keyPath:(NSString *)keyPath
                              statusCodes:(NSIndexSet *)statusCodes

提前致谢。

1 个答案:

答案 0 :(得分:0)

RKRequestMethod被定义为一个位掩码而不是一个类,所以你不能真正传递一个字符串作为方法参数,(即`@“RKRequestMethodPOST”'将不起作用)

typedef NS_OPTIONS(NSInteger, RKRequestMethod) {
    RKRequestMethodGET          = 1 << 0,
    RKRequestMethodPOST         = 1 << 1,
    RKRequestMethodPUT          = 1 << 2,
    RKRequestMethodDELETE       = 1 << 3,
    RKRequestMethodHEAD         = 1 << 4,
    RKRequestMethodPATCH        = 1 << 5,
    RKRequestMethodOPTIONS      = 1 << 6,
    RKRequestMethodAny          = (RKRequestMethodGET |
                                   RKRequestMethodPOST |
                                   RKRequestMethodPUT |
                                   RKRequestMethodDELETE |
                                   RKRequestMethodHEAD |
                                   RKRequestMethodPATCH |
                                   RKRequestMethodOPTIONS)
};