Iphone RestKit获取查询参数
我已经使用RestKit 0.10.0一段时间了,直到现在,我只将序列化对象发布到我的服务器:Iphone RestKit获取查询参数,iphone,ios,get,restkit,Iphone,Ios,Get,Restkit,我已经使用RestKit 0.10.0一段时间了,直到现在,我只将序列化对象发布到我的服务器: [[RKObjectManager sharedManager] postObject:serializedObject usingBlock:^(RKObjectLoader *loader) { loader.delegate = self;
[[RKObjectManager sharedManager] postObject:serializedObject
usingBlock:^(RKObjectLoader *loader) {
loader.delegate = self;
loader.objectMapping = responseMapping;
loader.serializationMIMEType = RKMIMETypeFormURLEncoded;
loader.targetObject = nil;
}];
到目前为止,一切顺利。但是我现在需要使用一些查询参数向服务器发出GET请求。我想到的第一件自然的事情就是像我发布对象一样:
- 为封装查询参数的对象创建序列化映射
- 为从服务器接收的对象创建响应映射
- 为RKRequestMethodGET(而不是RKRequestMethodPOST)定义并使用路由器
- 使用getObject:usingBlock(而不是postObject:usingBlock)发出请求
- 将查询参数追加到资源路径
NSDictionary *queryParams = [NSDictionary dictionaryWithObjectsAndKeys:
token, @"accessToken",
[NSNumber numberWithInt:level], @"level",
[NSNumber numberWithInt:count], @"count",
nil];
NSString* resourcePath = [PEER_SUGGESTIONS_CONTROLLER_PATH stringByAppendingQueryParameters:queryParams];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:resourcePath
usingBlock:^(RKObjectLoader *loader) {
loader.delegate = self;
loader.objectMapping = responseMapping;
}];
- 在加载程序块中设置查询参数
RKParams *params = [RKParams params];
[params setValue:token forParam:@"accessToken"];
[params setValue:[NSNumber numberWithInt:level] forParam:@"level"];
[params setValue:[NSNumber numberWithInt:count] forParam:@"count"];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:PEER_SUGGESTIONS_CONTROLLER_PATH
usingBlock:^(RKObjectLoader *loader) {
loader.delegate = self;
loader.objectMapping = responseMapping;
loader.params = params;
}];
我的问题是:
Q Hrm,引用你的要点弄乱了数字…我解决了在RKObjectLoader中添加一个类别的问题,即: 方法
-(void)getObject:(id<NSObject>)object usingBlock:(RKObjectLoaderBlock)block;
-(void)getObject:(id)对象使用block:(RKObjectLoaderBlock)块;
我在类别中添加了一种修改方法:
-(void)getObject:(id<NSObject>)object queryParameters:(NSDictionary*)queryParameters usingBlock:(void(^)(RKObjectLoader *))block;
-(void)getObject:(id)object queryParameters:(NSDictionary*)queryParameters使用block:(void(^)(RKObjectLoader*)块;
这里是列出的fpr文件“RKObjectManager+QueryParameters”:
//
// RKObjectManager+QueryParameters.h
// AlphaClient
//
// Created by Antonio Rossi on 14/07/12.
//
#import <RestKit/RestKit.h>
@interface RKObjectManager (QueryParameters)
- (void)getObject:(id<NSObject>)object queryParameters:(NSDictionary*)queryParameters usingBlock:(void(^)(RKObjectLoader *))block;
- (void)sendObject:(id<NSObject>)object queryParameters:(NSDictionary*)queryParameters method:(RKRequestMethod)method usingBlock:(void(^)(RKObjectLoader *))block;
@end
//
// RKObjectManager+QueryParameters.m
// AlphaClient
//
// Created by Antonio Rossi on 14/07/12.
//
#import "RKObjectManager+QueryParameters.h"
@implementation RKObjectManager (QueryParameters)
- (void)getObject:(id<NSObject>)object queryParameters:(NSDictionary*)queryParameters usingBlock:(void(^)(RKObjectLoader *loader))block {
[self sendObject:object queryParameters:queryParameters method:RKRequestMethodGET usingBlock:block];
}
- (void)sendObject:(id<NSObject>)object queryParameters:(NSDictionary*)queryParameters method:(RKRequestMethod)method usingBlock:(void(^)(RKObjectLoader *))block {
NSString *resourcePath = [self.router resourcePathForObject:object method:method];
[self sendObject:object toResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader) {
loader.method = method;
// need to transform the original URL because when method is GET the additional paramentes don't get added
RKURL *originalBaseURL = [RKURL URLWithBaseURL:[loader.URL baseURL]];
NSString *resourcePath = [self.router resourcePathForObject:object method:RKRequestMethodGET];
RKURL *authTokenURL = [originalBaseURL URLByAppendingResourcePath:resourcePath queryParameters:queryParameters];
[loader setURL:authTokenURL];
block(loader);
}];
}
@end
//
//RKObjectManager+QueryParameters.h
//字母客户端
//
//安东尼奥·罗西于2012年7月14日创作。
//
#进口
@接口对象管理器(查询参数)
-(void)getObject:(id)object queryParameters:(NSDictionary*)queryParameters使用block:(void(^)(RKObjectLoader*)块;
-(void)sendObject:(id)object queryParameters:(NSDictionary*)queryParameters方法:(RKRequestMethod)方法使用block:(void(^)(RKObjectLoader*)块;
@结束
以下是文件“RKObjectManager+QueryParameters.m”的列表:
//
// RKObjectManager+QueryParameters.h
// AlphaClient
//
// Created by Antonio Rossi on 14/07/12.
//
#import <RestKit/RestKit.h>
@interface RKObjectManager (QueryParameters)
- (void)getObject:(id<NSObject>)object queryParameters:(NSDictionary*)queryParameters usingBlock:(void(^)(RKObjectLoader *))block;
- (void)sendObject:(id<NSObject>)object queryParameters:(NSDictionary*)queryParameters method:(RKRequestMethod)method usingBlock:(void(^)(RKObjectLoader *))block;
@end
//
// RKObjectManager+QueryParameters.m
// AlphaClient
//
// Created by Antonio Rossi on 14/07/12.
//
#import "RKObjectManager+QueryParameters.h"
@implementation RKObjectManager (QueryParameters)
- (void)getObject:(id<NSObject>)object queryParameters:(NSDictionary*)queryParameters usingBlock:(void(^)(RKObjectLoader *loader))block {
[self sendObject:object queryParameters:queryParameters method:RKRequestMethodGET usingBlock:block];
}
- (void)sendObject:(id<NSObject>)object queryParameters:(NSDictionary*)queryParameters method:(RKRequestMethod)method usingBlock:(void(^)(RKObjectLoader *))block {
NSString *resourcePath = [self.router resourcePathForObject:object method:method];
[self sendObject:object toResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader) {
loader.method = method;
// need to transform the original URL because when method is GET the additional paramentes don't get added
RKURL *originalBaseURL = [RKURL URLWithBaseURL:[loader.URL baseURL]];
NSString *resourcePath = [self.router resourcePathForObject:object method:RKRequestMethodGET];
RKURL *authTokenURL = [originalBaseURL URLByAppendingResourcePath:resourcePath queryParameters:queryParameters];
[loader setURL:authTokenURL];
block(loader);
}];
}
@end
//
//RKObjectManager+QueryParameters.m
//字母客户端
//
//安东尼奥·罗西于2012年7月14日创作。
//
#导入“RKObjectManager+QueryParameters.h”
@实现对象管理器(查询参数)
-(void)getObject:(id)object queryParameters:(NSDictionary*)queryParameters使用block:(void(^)(RKObjectLoader*loader))block{
[self-sendObject:object queryParameters:queryParameters方法:RKRequestMethodGET usingBlock:block];
}
-(void)sendObject:(id)object queryParameters:(NSDictionary*)queryParameters方法:(RKRequestMethod)方法使用block:(void(^)(RKObjectLoader*)块{
NSString*resourcePath=[self.router resourcePathForObject:object-method:method];
[self-sendObject:object-toResourcePath:resourcePath usingBlock:^(RKObjectLoader*loader){
loader.method=方法;
//需要转换原始URL,因为当方法为GET时,不会添加其他参数
RKURL*originalBaseURL=[RKURL URLWithBaseURL:[loader.URL baseURL]];
NSString*resourcePath=[self.router resourcePathForObject:object方法:RKRequestMetho