// 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
} ];
買者自負(上面)
中塊設置PARAMS破壞,你可能在yourObject
已設置的任何映射,這種打破了使用對象映射的目的。如果你真的想用這種方法在你的Post中附加額外的參數而不是在對象中,Sebastian loader.params - Extra params有一個修正。
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];
答案的其餘部分是僅供參考,我是囤積。
老回答
我使用RestKit爲我的項目,面臨着同樣的問題。
我認爲RKParams
主要用於做POST
請求。我不能完全破譯你的代碼,因爲1)我不知道loader
的聲明? 2)RKParams
不可與Object Manager
一起使用?
我做到了。
裝載機法在應用程序委託
NSDictionary *shopParams = [NSDictionary dictionaryWithKeysAndObjects:@"limit",@"30", nil];
[[RKClient sharedClient] get:@"/api/v1/shops.json" queryParams:shopParams delegate:self];
代表
- (void)requestDidStartLoad:(RKRequest *)request {
NSLog(@"RK Request description: %@",[request description]);
}
輸出: RK Request description: <RKRequest: 0x7993db0>
和軌道記錄說{"limit"=>"30"}
。
從Xcode中的自動完成,你可以看到get
請求甚至沒有使用RKParams
。只是一個NSDict
。 POST請求使用它。
我的目標是將一個查詢字符串,即?location=singapore&etcetc
附加到Rails中的API方法中。爲此,RK附帶了一個名爲appendQueryParams
RK docs link的NSString
插件,您可以使用它追加查詢參數。
如果你的目標是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。
最終這也是我所做的。然而,我確實想使用對象管理器來使用RestKit的映射功能。 – 2012-02-26 20:38:53
@daemonsy感謝這一堆。一段時間以來,我一直在嘲笑我的頭。 – drewish 2012-07-18 15:28:29
@drewish謝謝。每當有人發現這個有用的時候,我會盡量更新它,以便更徹底。 – 2012-07-24 06:05:53