1

オブジェクトの RestKit マッピングは次のとおりです。

    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[ImageModel class]];

[mapping mapKeyPath:@"Description" toAttribute:@"description"];
[mapping mapKeyPath:@"Photo1"  toAttribute:@"photo1"];

[objectManager.mappingProvider addObjectMapping:mapping];

RKObjectMapping* serializeMapping = [mapping inverseMapping];
[objectManager.mappingProvider setSerializationMapping:serializeMapping forClass:[ImageModel class]];
[objectManager.router routeClass:[ImageModel class] toResourcePath:@"/image" forMethod:RKRequestMethodPOST];

[objectManager.mappingProvider setObjectMapping:mapping forResourcePathPattern:@"/image"];

そして、ここに ImageModel オブジェクトがあります:-

@property  (strong,nonatomic) NSString *description; 
@property  (strong,nonatomic) UIImage *photo1;

ここに私が試した3つの異なる方法がありますが、すべてエラーがあります:-

方法1.

オブジェクトを投稿するには、次のコードを使用するだけです。

obj.description = self.descriptionText.text;
obj.photo1 = selectedImage;
[[RKObjectManager sharedManager] postObject:obj delegate:self];

結果:- オブジェクトがサーバーにポストされ、サーバー スクリプトが同じオブジェクトを返します。クライアント側で応答が受信されますが、次のマッピング関連の例外が発生しました。

2012-10-26 20:16:39.015 APP[4548:7407] W restkit.object_mapping:RKObjectMappingOperation.m:244 Failed transformation of value at keyPath 'Photo1'. No strategy for transforming from '__NSCFString' to 'UIImage'

ログは、返されたオブジェクトの Photo1 フィールドに写真データが含まれていることを示していますが、マッピングから何が欠落しているかは理解できません。RestKitの達人からのアイデアは非常に役に立ちます!

方法 2 - sendObject:toResourcePath:usingBlock を呼び出す

[[RKObjectManager sharedManager] sendObject:self.obj toResourcePath:@"/image" usingBlock:^(RKObjectLoader *loader) {
    loader.targetObject = nil;
    loader.delegate = self;
    loader.method = RKRequestMethodPOST;

    if([obj photo1]){
        RKObjectMapping* serializationMapping = [[[RKObjectManager sharedManager] mappingProvider] serializationMappingForClass:[ImageModel class]];
        NSError* error = nil;
        NSDictionary* dictionary = [[RKObjectSerializer serializerWithObject:obj mapping:serializationMapping] serializedObject:&error];
        NSLog(@"%@", dictionary);
        RKParams* params = [RKParams paramsWithDictionary:dictionary];
        NSData* imageData =  UIImagePNGRepresentation([obj photo1]);
        [params setData:imageData MIMEType:@"image/png" forParam:@"Photo1"];
        loader.params = params;
    }
}];

結果: ログ ウィンドウに次のエラーが表示されます。

2012-10-26 20:32:15.327 APP[4627:c07] response code: 500
2012-10-26 20:32:22.388 APP[4627:c07] Loaded payload: {"Message":"An error has occurred."}
2012-10-26 20:32:27.878 APP[4627:c07] W restkit.object_mapping:RKObjectMapper.m:87 Adding mapping error: Could not find an object mapping for keyPath: ''
2012-10-26 20:32:27.878 APP[4627:c07] E restkit.network:RKObjectLoader.m:231 Encountered errors during mapping: Could not find an object mapping for keyPath: ''

方法 3

postObject:usingBlock を呼び出す

[[RKObjectManager sharedManager] postObject:obj usingBlock:^(RKObjectLoader *loader){

    loader.delegate = self;

    RKParams* params = [RKParams params];
    [params setValue:obj.description forParam:@"Description"];
    [params setData:[app convertImageToNSData: [app photo1]] MIMEType:@"image/png" forParam:@"Photo1"];        
    loader.params = params;
}];

結果:- 次の例外がログ ウィンドウに表示されます。

2012-10-26 20:42:07.735 APP[4670:c07] response code: 500
2012-10-26 20:42:10.726 APP[4670:c07] Loaded payload: {"Message":"An error has occurred."}
2012-10-26 20:42:16.569 APP[4670:c07] W restkit.object_mapping:RKObjectMapper.m:87 Adding mapping error: Could not find an object mapping for keyPath: ''
2012-10-26 20:42:16.570 APP[4670:c07] E restkit.network:RKObjectLoader.m:231 Encountered errors during mapping: Could not find an object mapping for keyPath: ''
2012-10-26 20:42:16.570 APP[4670:c07] E restkit.network:RKObjectLoader.m:360 Encountered an error while attempting to map server side errors from payload: Could not find an object mapping for keyPath: ''

どうやら私はマッピングに何も欠けていませんが、そうかもしれません。RestKit 達人は、これらの 3 つの方法のいずれかを使用して、フィールドの 1 つに画像を持つオブジェクトをサーバーに送信できるようにすることができますか。

4

0 に答える 0