0

私は次のようなリクエストオブジェクトを持っています:

@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];

requestMyRequest私のクラスのインスタンスです。requestPathはただのNSString.

キーをマップしても、MyUpdate に対してキーが無効であるというエラーが表示され続けます。RKObjectMapping を使用していくつかの重要なステップを見逃していますか?

4

1 に答える 1

0

「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);
     }
于 2012-06-14T07:01:12.340 に答える