gpt4 book ai didi

objective-c - iOS:RestKit 加载对象并发送参数

转载 作者:可可西里 更新时间:2023-11-01 03:06:45 26 4
gpt4 key购买 nike

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

最终 url 请求不包含“?param1=val”部分 - 为什么?

最佳答案

几个月后更新

真正的答案是 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

} ];

买者自负(以上)

在 block 中设置参数会破坏您可能在 yourObject 中设置的任何映射,有点违背了使用对象映射的目的。塞巴斯蒂安 (Sebastian) 这里有一个修复程序 loader.params - Extra params如果您真的想使用此方法将额外参数附加到您的 Post 而不是对象中。

将参数作为查询字符串发送(即 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];

其余答案仅供引用,我是个囤货狂。


旧答案

我正在为我的项目使用 RestKit 并面临同样的问题。

我认为RKParams主要用来做POST要求。我无法完全破译您的代码,因为 1) 我不知道 loader的声明? 2) RKParams不能与 Object Manager 一起使用?

我做到了。

App Delegate 中的加载器方法

NSDictionary *shopParams = [NSDictionary dictionaryWithKeysAndObjects:@"limit",@"30", nil]; 

[[RKClient sharedClient] get:@"/api/v1/shops.json" queryParams:shopParams delegate:self];

委托(delegate)

- (void)requestDidStartLoad:(RKRequest *)request {
NSLog(@"RK Request description: %@",[request description]);
}

输出: RK Request description: <RKRequest: 0x7993db0>和 rails 日志说 {"limit"=>"30"} .

从 Xcode 的自动完成中,您可以看到 get请求甚至没有使用 RKParams .只是一个NSDict . POST 请求使用它。

我的目标是附加一个查询字符串,即 ?location=singapore&etcetc到我在 Rails 中的 API 方法。为此,RK 附带了一个 NSString插件名为 appendQueryParams RK docs link您可以使用它来附加查询参数。

如果您的目标是 POST图片等,可以按照上面的思路使用RKClient .

更新:

如果您只想将参数附加到对象管理器

 NSDictionary *shopParams = [NSDictionary dictionaryWithKeysAndObjects:
@"limit",@"20",
@"location",@"latitude,longitude",
nil];

这已过时并标记为弃用。


 [[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/v1/shops.json" appendQueryParams:shopParams] delegate:self];

改用这个:

 [[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/v1/shops.json stringByAppendingQueryParameters:shopParams] delegate:yourLoaderDelegate];

Rails 日志:{"location"=>"latitude,longitude", "limit"=>"20"}

希望在我的回答中我没有做出任何错误的陈述。

引用这个问题RestKit GET query parameters .

关于objective-c - iOS:RestKit 加载对象并发送参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9403008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com