Alo*_*mir 8 parameters objective-c ios restkit
在GET方法上使用loadObjectAtResourcePath,不在请求中包含我的参数.
例如,如果我发送:
[RKObjectManager objectManagerWithBaseURL:@"http://something/ws"];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/res" delegate:self block:^(RKObjectLoader *loader) {
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"val", @"param1",
nil];
loader.params = [RKParams paramsWithDictionary:dict];
}];
Run Code Online (Sandbox Code Playgroud)
最终的url请求不包括"?param1 = val"部分 - 为什么?
Dam*_* Aw 15
稍后更新月份
真正的答案是loader.params创建HTTP BODY,因此它适用于POST, PUT, DELETE等,但不适用于GET将params附加到URL的位置.
因此,如果你面临同样的问题GET,下面的答案仍然有效,但如果你发出GET请求,它主要是使用将参数附加到查询字符串的方法.
总结两者之间的差异.
在HTTP正文中发送参数(即POST, UPDATE, DELETE)
// Convert a NS Dictionary into Params
RKParams *params = [RKParams paramsWithDictionary:optionValues];
// I use sendObject to skip the router. Otherwise it's normally postObject
[[RKObjectManager sharedManager] sendObject:yourObject toResourcePath: yourResourcePath usingBlock:^(RKObjectLoader *loader) {
loader.method = RKRequestMethodPOST;
loader.delegate = delegate;
loader.params = params; // This sets params in the POST body and discards your yourObject mapping
} ];
Run Code Online (Sandbox Code Playgroud)
警告Emptor(以上)
在块中设置params会破坏您可能已设置的任何映射,这会破坏yourObject使用对象映射的目的.Sebastian loader.params这里有一个解决方法 -如果你真的想使用这个方法将额外的参数附加到你的Post而不是在对象中,那么这是一个额外的参数.
以params形式发送为查询字符串(即GET)
// Make a NS dictionary and use stringByAppendingQueryParameters
NSDictionary *shopParams = [NSDictionary dictionaryWithKeysAndObjects:
@"limit",@"20",
@"location",@"latitude,longitude",
nil];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/v1/shops.json" stringByAppendingQueryParameters:shopParams] delegate:objectDelegate];
Run Code Online (Sandbox Code Playgroud)
答案的其余部分仅供参考,我是一个囤积者.
老答案
我正在将RestKit用于我的项目并面临同样的问题.
我认为RKParams主要是用来做POST请求.我不能完全破译你的代码,因为1)我不知道loader声明?2)RKParams是不是一起使用Object Manager?
我这样做了
App代理中的加载方法
NSDictionary *shopParams = [NSDictionary dictionaryWithKeysAndObjects:@"limit",@"30", nil];
[[RKClient sharedClient] get:@"/api/v1/shops.json" queryParams:shopParams delegate:self];
Run Code Online (Sandbox Code Playgroud)
代表
- (void)requestDidStartLoad:(RKRequest *)request {
NSLog(@"RK Request description: %@",[request description]);
}
Run Code Online (Sandbox Code Playgroud)
输出:
RK Request description: <RKRequest: 0x7993db0>和rails log说{"limit"=>"30"}.
从Xcode中的自动完成功能,您可以看到get请求甚至没有使用RKParams.只是一个NSDict.POST请求使用它.
我的目标是附加一个查询字符串,即?location=singapore&etcetc我在Rails中的API方法.为此,RK附带了一个NSString名为appendQueryParams RK docs链接的插件,可用于附加查询参数.
如果你的目标是POST图像等,你可以按照上面的使用思路RKClient.
更新:
如果您只想将参数附加到对象管理器
NSDictionary *shopParams = [NSDictionary dictionaryWithKeysAndObjects:
@"limit",@"20",
@"location",@"latitude,longitude",
nil];
Run Code Online (Sandbox Code Playgroud)
这已过时并标记为弃用.
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/v1/shops.json" appendQueryParams:shopParams] delegate:self];
Run Code Online (Sandbox Code Playgroud)
请改用:
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/v1/shops.json stringByAppendingQueryParameters:shopParams] delegate:yourLoaderDelegate];
Run Code Online (Sandbox Code Playgroud)
Rails日志:{"location"=>"latitude,longitude", "limit"=>"20"}
希望在我的回答中我没有做出任何错误的陈述.
请参阅此问题RestKit GET查询参数.
| 归档时间: |
|
| 查看次数: |
6517 次 |
| 最近记录: |