具有GET请求的多根

时间:2014-03-20 14:24:38

标签: ios objective-c json restkit

我正在寻找使用以下JSON

映射2个不同数组的方法
"establishments": [
    {
        "id": 1,
        "name": "Boudin Sourdough Bakery and Cafe",
        "address": "1 Stockton St",
        "zip_code": "94108",
        "city": "San Francisco",
        "country": "us",
        "phone_number": "",
        "position": {
            "latitude": 37.78590500000001,
            "longitude": -122.406289
        },
        "distance_from": 13.75783097391759
    }
],
"places": [
    {
        "id": 3,
        "name": "Private Place",
        "position": {
            "latitude": 37.78583400000001,
            "longitude": -122.406417
        },
        "is_private": false,
        "distance_from": 0
    }
]

我有两种不同的映射。一个用于建立,另一个用于场所。我找到了documentation的一些帮助,但它只适用于PUT或POST请求。

目前,我有以下要求

[session.objectManager getObjectsAtPathForRouteNamed:APICallSearchSearchPlaceRouteName object:nil parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    NSArray * resultPlaces=mappingResult.array;

    [delegate APICallDidSearch:resultPlaces];
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    NSError* myError=[self catchCustomErrorInRKError:error setDomain:@"Search"];
    if (myError.code == NSURLErrorCancelled) return;

    [delegate APICallDidFailSearch:myError];
}];

制图&映射描述符

RKEntityMapping *establishmentMapping = [APICallEstablishment RKGetEstablishmentMappingForManagedObjectStore:self.appDelegate.managedObjectStore];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:establishmentMapping
                                                                                        method:RKRequestMethodGET
                                                                                   pathPattern:APICallSearchSearchPlacePattern
                                                                                       keyPath:@"establishments"
                                                                                   statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];


[session.objectManager addResponseDescriptor:responseDescriptor];

我试图让这个例子适应我的情况(就在我上面写的请求之前)

RKManagedObjectRequestOperation *operation = [session.objectManager appropriateObjectRequestOperationWithObject:establishmentMapping method:RKRequestMethodGET path:@"/whatever" parameters:nil];
operation.targetObject = nil;
//Does it still exist ? (XCode says an error)
//operation.targetObjectID = nil;
[session.objectManager enqueueObjectRequestOperation:operation];

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

使用session.objectManager getObjectsAtPathForRouteNamed...是一个不错的选择(比尝试直接使用RKManagedObjectRequestOperation更好)。

您需要创建另一个响应描述符,例如responseDescriptor,但需要places密钥路径和映射。