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.
Dzięki za przykład Blake! Mam nadzieję, że stanie się to częstym problemem! =) –
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
"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