2013-01-06 11 views
10

Muszę utworzyć dwa różne typy POST pochodzące z klasy User.Dodawanie dwóch deskryptorów żądań dla danej klasy w pakiecie Restkit 0.2

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

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

Starałem się zrobić dwa deskryptory żądania i dodając je do mojego obiektu menedżera jednak otrzymuję błąd

„Nie można dodać deskryptor żądań dla tej samej klasy obiektów jako istniejącego życzenie deskryptor. "

Mój kod

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

Czy ktoś wie jak mogę rozwiązać ten problem bez tworzenia oddzielnej klasy dla tych wniosków?

Każda pomoc jest doceniana.

Dzięki.

Odpowiedz

5

Możesz użyć dynamicznego mapowania, aby przełączyć zachowania serializacyjne. Jeśli jest to dość częsty problem, możemy przypisać dopasowanie ścieżki do deskryptora żądania. Po prostu nie miałem wielu próśb o taką funkcję.

Jest to przykład, jak korzystać z dynamicznego mapowania z prośbą w testach jednostkowych: https://github.com/RestKit/RestKit/blob/master/Tests/Logic/ObjectMapping/RKObjectParameterizationTest.m#L495-L534

+0

Dzięki za przykład Blake! Mam nadzieję, że stanie się to częstym problemem! =) –

+0

Blake - Ostatnio miałem ten sam problem i wykorzystałem dwie instancje ObjectManager (przy założeniu, że były to bardzo różne obiekty). Czy to zalecana najlepsza praktyka? – bobtheowl2

+7

"Jeśli jest to dość częsty problem, możemy prawdopodobnie dodać dopasowanie ścieżki do deskryptora żądania" - jeśli można to uznać za propozycję funkcji, +1 dla niego :) – MrTJ

Powiązane problemy