在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界面任务。
- Swift:主界面冻结即使一切都在asynchronous线程? URLsession?
- 如何将代码块分派到iOS中的同一线程?
- 从asynchronousWeb服务响应更新托pipe对象的最佳方法?
- 使用dispatch_async或performSelectorOnMainThread在主线程上执行UI更改?
- 当我在asynchronous重载数据期间滚动时,为什么我的UITableView失去stream动性?
- asynchronous获取Swift Xcode
- NSOperationqueue背景,下载图片
- 如何使用Swift在iOS上同步运行两个函数
- 简单的asynchronous图像下载UIImage视图