Получение сообщения об ошибке при использовании RKObjectMapping и RKObjectSerializer от RestKit для параметра записи RKClient

У меня есть объект запроса, например, так:

@interface MyUpdate
@property (nonatomic, copy) NSString* name;
@property (nonatomic, assign) int value;
@end

@interface MyRequest
@property (nonatomic, assign) int index;
@property (nonatomic, retain) MyUpdate* update;
@end

Я использую RKObjectMapping и RKObjectSerializer, чтобы создать строку JSON и использовать ее в POST:

RKObjectMapping* updateMapping = [RKObjectMapping mappingForClass:[MyUpdate class]];
[updateMapping mapForKeyPath:@"name" toAttribute:@"Name"];
[updateMapping mapForKeyPath:@"value" toAttribute:@"Value"];

RKObjectMapping* requestMapping = [RKObjectMapping mappingForClass:[MyRequest class]];
[requestMapping mapForKeyPath:@"index" toAttribute:@"Index"];
[requestMapping mapKeyPath:@"update" toRelationship:@"Update" withMapping:updateMapping];

RKObjectSerializer* serializer = [RKObjectSerializer serializerWithObject:request mapping:requestMapping];

[[RKClient sharedClient] post:requestPath params:[serializer serializationForMIMEType:RKMIMETypeJSON error:nil] delegate:self];

request это пример моего MyRequest учебный класс. requestPath это просто NSString,

Я продолжаю получать эту ошибку, говоря, что ключ недействителен для MyUpdate, даже если у меня есть сопоставленный. Я пропускаю какой-то важный шаг, используя RKObjectMapping?

1 ответ

Я использую "RKObjectLoader", чтобы сделать работу. Вот пример:

    MyUpdate *myUpdate = [[MyUpdate alloc] init];

    [[RKClient sharedClient].HTTPHeaders setValue:RKMIMETypeJSON forKey:@"Content-Type"];      

    // Prepare the request
    NSMutableDictionary *requestDictionary = [[NSMutableDictionary alloc] init];
    [requestDictionary setObject:yourIndexVar forKey:@"Index"];
    [requestDictionary setObject:fileName forKey:@"fileName"];

    NSError* error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:requestDictionary options:NSJSONWritingPrettyPrinted error:&error];

    NSString *JSON = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

    RKParams *params = [RKRequestSerialization serializationWithData:[JSON dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON]; 


    // Prepare the response mapping
    RKObjectMapping* objectMapping = [RKObjectMapping mappingForClass:MyUpdate class]];
    [objectMapping mapKeyPath:@"name" toAttribute:@"Name"];    
    [objectMapping mapForKeyPath:@"value" toAttribute:@"Value"];

    [objectMapping mapKeyPath:@"update" toRelationship:@"Update" withMapping:objectMapping];


    RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"BASE_URL"];  
    [manager setClient:[RKClient sharedClient]];
    [manager.mappingProvider setMapping:objectMapping forKeyPath:@"****Result"];  

    RKObjectLoader *objectLoader = [manager loaderWithResourcePath:@"RELATIVE_PATH"];   

    // For example:
    // BASE_URL = "http://mysite.com/"
    // RELATIVE_PATH (service end-point uri) = "/ServiceName/SaveFile/"
    // **** = "SaveFile"

    objectLoader.targetObject = myUpdate;
    objectLoader.method = RKRequestMethodPOST;
    objectLoader.params = params;
    objectLoader.delegate = self;

    @try 
    {
        [objectLoader send];
    }
    @catch (NSException *exception) 
     {
         NSLog(@"NSException - Name: %@, Reason: %@", exception.name, exception.reason);
     }
Другие вопросы по тегам