2013-01-06 6 views
10

Userクラスから2種類のPOSTを作成する必要があります。Restkitのあるクラスに2つのリクエストディスクリプタを追加する0.2

//JSON Type A 
{ 
    "password":"12345", 
    "email":"[email protected]" 
} 

//JSON Type B 
{ 
    "user":{ 
     "Password":"12345", 
     "Email":"[email protected]" 
    } 
} 

私は2つの要求記述子を作ってみました、私のオブジェクトマネージャに追加しましたしかし、私はエラーが

「 既存の要求と同じオブジェクトクラスの要求記述を追加することはできません取得しますディスクリプタ。"

私のコード

@interface User : NSObject 

@property (nonatomic, retain) NSString * userID; 
@property (nonatomic, retain) NSString * email; 
@property (nonatomic, retain) NSString * password; 
@property (nonatomic, retain) NSString * firstName; 
@property (nonatomic, retain) NSString * lastName; 

@end 

- (void)setupUserMapping:(RKObjectManager *)objectManager { 

    // Setup user response mappings 
    RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[User class]]; 
    [userMapping addAttributeMappingsFromDictionary:@{ 
    @"ID" :@"userID", 
    @"Email" : @"email", 
    @"Password" : @"password", 
    @"FirstName" : @"firstName", 
    @"LastName" : @"lastName", 
    }]; 


    RKResponseDescriptor *responseDescriptorAuthenticate = [RKResponseDescriptor responseDescriptorWithMapping:userMapping 
                         pathPattern:@"/Authenticate" 
                          keyPath:nil 
                         statusCodes:[NSIndexSet indexSetWithIndex:200]]; 


    RKResponseDescriptor *responseDescriptorRegister = [RKResponseDescriptor responseDescriptorWithMapping:userMapping 
                            pathPattern:@"/Register" 
                             keyPath:nil 
                            statusCodes:[NSIndexSet indexSetWithIndex:200]]; 
    [objectManager addResponseDescriptor:responseDescriptorRegister]; 
    [objectManager addResponseDescriptor:responseDescriptorAuthenticate]; 

    // Setup user request mappings 
    RKObjectMapping* userRequestMappingForRegister = [RKObjectMapping requestMapping]; 
    [userRequestMappingForRegister addAttributeMappingsFromDictionary:@{ 
    @"email" : @"Email", 
    @"password" : @"Password", 
    @"firstName" : @"FirstName", 
    @"lastName" : @"LastName", 
    }]; 
    RKRequestDescriptor *requestDescriptorForRegister = [RKRequestDescriptor requestDescriptorWithMapping:userRequestMappingForRegister objectClass:[User class] rootKeyPath:@"user"]; 


    RKObjectMapping* userRequestMappingForAuthenticate = [RKObjectMapping requestMapping]; 
    [userRequestMappingForAuthenticate addAttributeMappingsFromDictionary:@{ 
    @"userID" :@"ID", 
    @"email" : @"email", 
    @"password": @"password" 
    }]; 
    RKRequestDescriptor *requestDescriptorForAuthenticate = [RKRequestDescriptor requestDescriptorWithMapping:userRequestMappingForAuthenticate objectClass:[User class] rootKeyPath:nil]; 

    [objectManager addRequestDescriptor:requestDescriptorForRegister]; 
    [objectManager addRequestDescriptor:requestDescriptorForAuthenticate]; 
} 

は、誰もが、私はこれらの要求のための別のクラスを作成せずに、この問題を解決することができる方法を知っていますか?

何か助けていただければ幸いです。

ありがとうございました。

答えて

5

ダイナミックマッピングを使用して、シリアル化動作を切り替えることができます。これが一般的な問題であれば、要求記述子にパスマッチングを追加することが考えられます。私はそのような機能のためにたくさんの要求を持っていません。

ユニットテストでの要求に動的マッピングを使用する方法の例があります:たとえばブレイク用https://github.com/RestKit/RestKit/blob/master/Tests/Logic/ObjectMapping/RKObjectParameterizationTest.m#L495-L534

+0

ありがとう!私はそれが共通の問題になることを願っています! =) –

+0

Blake - 私は最近同じ問題を抱えていて、2つのObjectManagerインスタンスを使用しました。これが推奨されるベストプラクティスですか? – bobtheowl2

+7

"これは一般的な問題であれば、リクエスト記述子にパスマッチングを追加することができます" - これは機能提案と見なすことができる場合は+1します:) – MrTJ

関連する問題