Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用可选的URL参数映射GET请求的不同JSON响应_Ios_Objective C_Mapping_Restkit_Restkit 0.20 - Fatal编程技术网

Ios 如何使用可选的URL参数映射GET请求的不同JSON响应

Ios 如何使用可选的URL参数映射GET请求的不同JSON响应,ios,objective-c,mapping,restkit,restkit-0.20,Ios,Objective C,Mapping,Restkit,Restkit 0.20,我需要使用可选的url参数对url执行GET请求 基本URL类似于http://host/user/explore,可选择查询http://host/user/explore?who=VALUE&category=VALUE&service=VALUE以获得更准确的结果 对于第一种情况,响应在根目录下带有键,例如: { "professionals": [ { "_id": "59e8576cb524cf44a435844b" } ], "salons

我需要使用可选的url参数对url执行GET请求

基本URL类似于
http://host/user/explore
,可选择查询
http://host/user/explore?who=VALUE&category=VALUE&service=VALUE
以获得更准确的结果

对于第一种情况,响应在根目录下带有键,例如:

{
  "professionals": [
    {
        "_id": "59e8576cb524cf44a435844b"
    }
   ],
 "salons": [
    {
        "_id": "59e857bbb524cf44a4358454"
    }
   ]
}
通过设置响应描述符,我能够成功映射响应,例如:

RKResponseDescriptor *response = [RKResponseDescriptor
                                  responseDescriptorWithMapping:[Explore map1]
                                  method:RKRequestMethodGET
                                  pathPattern:@"user/explore"
                                  keyPath:nil                    
       statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
return response;
(请注意,
[Explore map1]
用于映射“Professional”NSArray和另一个由“Salon”NSObjects组成的NSArray)

但是,当我查询
http://host/user/explore?who=VALUE&category=VALUE&service=VALUE
,我的回答变成:

{
  "_id": "59f6f9fc36e51720da2e85f4"
},
{
  "_id": "92x2f9fc36e51720da2e66d5"
}
其中,实际返回的对象都是相同类型的(并且在根上不再有键)

现在很明显,我的
RKResponseDescriptor
RKObjectMapping
无法正确处理这种情况

我研究过使用
RKDynamicMapping
RKRoute
,但无法真正了解它们的工作原理,或者它们是否适用于我的情况…

您的url是: 那么就这样做吧:

    let postMapping: RKObjectMapping = RKObjectMapping(for: GetFoo.self)
    postMapping.addAttributeMappings(from:["who","category","service"])

    // Define response decriptor

    let statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClass.successful)
    let resDescriptor = RKResponseDescriptor(mapping: postMapping, method: RKRequestMethod.GET, pathPattern: "user/explore", keyPath: nil, statusCodes: statusCodes)

    // Create object manager

    let url = URL(string: "http://host")

    let jsonPlaceholderManager = RKObjectManager(baseURL: url)
    jsonPlaceholderManager?.addResponseDescriptor(resDescriptor)
    RKObjectManager.setShared(jsonPlaceholderManager)

    RKObjectManager.shared().getObjectsAtPath("/user/explore?who=VALUE&category=VALUE&service=VALUE", parameters: nil, success: { (operation, mappingResult) -> Void in

        let dataResponse = operation?.httpRequestOperation.responseData
        let jsonData = try? JSONSerialization.jsonObject(with: dataResponse!, options: .mutableContainers) as? NSMutableDictionary
        print(dataResponse)