Objective c 向对象发送post请求和映射响应
我是restKit的新手,我有几个问题要问你。我 无法理解如何使用json/xml将Post请求发送到我的web 服务并将传入的回复映射到我的类。有人能给我吗 请帮我一个忙。我使用的代码如下: 在ApplicationLegate中,我正在实例化RKObjectManager 提供基本URL:Objective c 向对象发送post请求和映射响应,objective-c,ios,restkit,object-object-mapping,Objective C,Ios,Restkit,Object Object Mapping,我是restKit的新手,我有几个问题要问你。我 无法理解如何使用json/xml将Post请求发送到我的web 服务并将传入的回复映射到我的类。有人能给我吗 请帮我一个忙。我使用的代码如下: 在ApplicationLegate中,我正在实例化RKObjectManager 提供基本URL: RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"https://example.com/services/"]
RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"https://example.com/services/"];
// Request params in Dictionary
NSArray *objects = [NSArray arrayWithObjects: email, password,
nil];
NSArray *keys = [NSArray arrayWithObjects:@"username",
@"password", nil];
NSDictionary *params = [NSDictionary dictionaryWithObjects:objects
forKeys:keys];
NSLog(@"Manager: %@", [RKObjectManager
sharedManager].description);
// User object Mapping
RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:
[User class]];
[userMapping mapKeyPath:@"userName" toAttribute:@"userName"];
[userMapping mapKeyPath:@"lastName" toAttribute:@"lastName"];
[userMapping mapKeyPath:@"active" toAttribute:@"active"];
[[RKObjectManager sharedManager].mappingProvider
setMapping:userMapping forKeyPath:@"user"];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/
login" delegate:self];
当post发送到/登录时,服务器应发送回有效的json
然后将该json映射到我的用户类
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:
(NSArray*)objects {
RKLogInfo(@"Load collection of Articles: %@", objects);
}
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:
(NSError *)error
{
NSLog(@"Objecy Loader failed: %@", error);
}
- (void)request:(RKRequest *)request didFailLoadWithError:(NSError
*)error
{
NSLog(@"Request failed");
}
- (void)request:(RKRequest*)request didLoadResponse:
(RKResponse*)response {
if ([request isGET]) {
// Handling GET /foo.xml
if ([response isOK]) {
// Success! Let's take a look at the data
NSLog(@"Retrieved XML: %@", [response bodyAsString]);
}
} else if ([request isPOST]) {
// Handling POST /other.json
if ([response isXML]) {
///NSLog(@"Seng a JSON request:! \n %@", [request
HTTPBodyString]);
NSLog(@"Got a responce! \n %@", [response bodyAsString]);
}
} else if ([request isDELETE]) {
// Handling DELETE /missing_resource.txt
if ([response isNotFound]) {
NSLog(@"The resource path '%@' was not found.", [request
resourcePath]);
}
}
}
当我执行它时,objectLoader方法不会被触发,我的
对restkit的理解是,他们应该在
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/login"
delegate:self];
被处决了?非常感谢您的帮助:)您是否记得使用将restkit的委托设置为该用户类(或者在您捕获委托的任何位置) 另外,我认为添加映射的较新方法是
[sharedManager.mappingProvider addObjectMapping:userMapping];
[sharedManager.mappingProvider setMapping:userMapping forKeyPath:@"/somepath"];
[sharedManager.mappingProvider setSerializationMapping:[userMapping inverseMapping] forClass:[User class]];
// Must set the router up to handle posts
[sharedManager.router routeClass:[User class] toResourcePath:@"/api/users" forMethod:RKRequestMethodPOST];
再次编辑:并使用如下加载程序创建一篇文章。可能是因为你的所作所为而杀人,但看一眼也无妨
RKObjectLoader* loader = [RKObjectLoader loaderWithResourcePath:url objectManager:self.objectManager delegate:self.currentDelegate];
loader.method = RKRequestMethodPOST;
loader.sourceObject = self;
loader.targetObject = self;
loader.serializationMIMEType = self.objectManager.serializationMIMEType;
loader.serializationMapping = [self.objectManager.mappingProvider serializationMappingForClass:self.mappingClass];
loader.objectMapping = [self.objectManager.mappingProvider objectMappingForClass:self.mappingClass];
[loader send]; //<<the actual post
RKObjectLoader*loader=[RKObjectLoader loaderWithResourcePath:url objectManager:self.objectManager委托:self.currentDelegate];
loader.method=RKRequestMethodPOST;
loader.sourceObject=self;
loader.targetObject=self;
loader.serializationMIMEType=self.objectManager.serializationMIMEType;
loader.serializationMapping=[self.objectManager.mappingProvider serializationMappingForClass:self.mappingClass];
loader.objectMapping=[self.objectManager.mappingProvider objectMappingForClass:self.mappingClass];
[加载器发送]// 嗯,您甚至不向服务器发送数据。几天前,我写了一段解释 是的,具有这些方法的类正在实现RKObjectLoaderDelegate
[sharedManager.mappingProvider addObjectMapping:userMapping];
[sharedManager.mappingProvider setMapping:userMapping forKeyPath:@"/somepath"];
[sharedManager.mappingProvider setSerializationMapping:[userMapping inverseMapping] forClass:[User class]];
// Must set the router up to handle posts
[sharedManager.router routeClass:[User class] toResourcePath:@"/api/users" forMethod:RKRequestMethodPOST];
RKObjectLoader* loader = [RKObjectLoader loaderWithResourcePath:url objectManager:self.objectManager delegate:self.currentDelegate];
loader.method = RKRequestMethodPOST;
loader.sourceObject = self;
loader.targetObject = self;
loader.serializationMIMEType = self.objectManager.serializationMIMEType;
loader.serializationMapping = [self.objectManager.mappingProvider serializationMappingForClass:self.mappingClass];
loader.objectMapping = [self.objectManager.mappingProvider objectMappingForClass:self.mappingClass];
[loader send]; //<<the actual post