在我的第一个ViewController(MonitorViewController)中,这是在接口文件MonitorViewController.h中:
#import <RestKit/RestKit.h>
@interface MonitorViewController : UIViewController <RKRequestDelegate>
在MonitorViewController.m ViewDidLoad方法中,我最后有这个:
RKClient* client = [RKClient clientWithBaseURL:@"http://192.168.2.3:8000/DataRecorder/ExternalControl"];
NSLog(@"I am your RKClient singleton : %@", [RKClient sharedClient]);
[client get:@"/json/get_Signals" delegate:self];
MonitorViewController.m中委托方法的实现:
- (void) request: (RKRequest *) request didLoadResponse: (RKResponse *) response {
if ([request isGET]) {
NSLog (@"Retrieved : %@", [response bodyAsString]);
}
}
- (void) request:(RKRequest *)request didFailLoadWithError:(NSError *)error
{
NSLog (@"Retrieved an error");
}
- (void) requestDidTimeout:(RKRequest *)request
{
NSLog(@"Did receive timeout");
}
- (void) request:(RKRequest *)request didReceivedData:(NSInteger)bytesReceived totalBytesReceived:(NSInteger)totalBytesReceived totalBytesExectedToReceive:(NSInteger)totalBytesExpectedToReceive
{
NSLog(@"Did receive data");
}
我的AppDelegate方法DidFinishLaunchingWithOptions方法只返回YES而没有别的。
答案 0 :(得分:0)
我建议使用RestKit framework。使用restkit,您只需执行以下操作:
// create the parameters dictionary for the params that you want to send with the request
NSDictionary* paramsDictionary = [NSDictionary dictionaryWithObjectsAndKeys: @"00003",@"SignalId", nil];
// send your request
RKRequest* req = [client post:@"your/resource/path" params:paramsDictionary delegate:self];
// set the userData property, it can be any object
[req setUserData:@"SignalId = 00003"];
然后,在委托方法中:
- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response {
// check which request is responsible for the response
// to achieve this, you can do two things
// check the parameters of the request like this
NSLog(@"%@", [request URL]); // this will print your request url with the parameters
// something like http://myamazingrestservice.org/resource/path?SignalId=00003
// the second option will work if your request is not a GET request
NSLog(@"%@", request.params); // this will print paramsDictionary
// or you can get it from userData if you decide to go this way
NSString* myData = [request userData];
NSLog(@"%@", myData); // this will log "SignalId = 00003" in the debugger console
}
因此,您永远不需要发送服务器端未使用的参数,只是为了区分您的请求。此外,RKRequest类还有许多其他属性可用于检查哪个请求对应于给定的响应。但是如果你发送了大量相同的请求,我认为 userData 是最好的解决方案。
RestKit还将帮助您完成其他常见的休息接口任务。