在iOS 5中使用平静的Web服务

在我的第一个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,没有别的。

我build议使用RestKit框架 。 有了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是最好的解决scheme。

RestKit还将帮助您完成其他常见的rest界面任务。