IOS Development Guide Chapter 15th access to Web service using Lightweight network request Architecture Mknetworkkit
Last Update:2015-09-20
Source: Internet
Author: User
<span id="Label3"></p><p><p><span style="font-size: 16px;">Third-party Network framework except for Nsurlconnection and nsurlrequest provided by Apple</span></p></p><p><p><span style="font-size: 16px;">1 Installing and configuring the Mknetworkkit framework</span></p></p><p><p><span style="font-size: 16px;">Download and open the Mknetworkkit directory Add Mknetworkkit folder to the new Project-add a supported class library or framework cfnetwork.framework Systemconfiguration.framework Security.framework-adding Precompiled Header Files</span></p></p><p><p><span style="font-size: 16px;">#ifndef mynotes/mynotes-prefix.pch</span></p></p><p><p><span style="font-size: 16px;"># define MYNOTES/MYNOTES-PREFIX.PCH</span></p></p><p><p><span style="font-size: 16px;">#import <Foundation/foundation.h></span></p></p><p><p><span style="font-size: 16px;">#endif</span></p></p><p><p><span style="font-size: 16px;">2 Network Requests</span></p></p><p><p><span style="font-size: 16px;">Mknetworkoperation: encapsulates the request for the corresponding class, we need to create a mknetworkoperation for each network Request.</span></p></p><p><p><span style="font-size: 16px;">Mknetworkengine: responsible for the management of network queues, simple requests for direct use, complex cases can be sub-class mknetworkengine.</span></p></p><p><p><span style="font-size: 16px;">1) Implement GET Request</span></p></p><pre><span style="font-size: 16px;"><span style="color: #008000;"><span style="color: #008000;">/*</span></span><span style="color: #008000;"><span style="color: #008000;">* Start requesting web Service</span></span><span style="color: #008000;"><span style="color: #008000;">*/</span></span>-(<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">startrequest{sets the request path, which is the content after the host name (domain name or IP address). NSString</span></span>*path = [[nsstring alloc] initwithformat:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">/service/mynotes/webservice.php?email=%@&type=%@&action=%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">< your 51work6.com user mailbox ></span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">JSON</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Query</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; Create the Mknetworkengine object, the parameter is the hostname and the request header, the hostname is preceded by HTTP or www. <span style="color: #ff0000;">Mknetworkengine</span> </span></span><span style="color: #ff0000;"><span style="color: #ff0000;">*engine = [[mknetworkengine alloc] initwithhostname:@ "51work6.com"</span></span><span style="color: #000000;"><span style="color: #000000;"><span style="color: #ff0000;">Customheaderfields:nil</span>];<br>Creates a mknetworkoperation object, which is the contents of the host name after the Parameter. Other parameters are params: request parameter Httpmethod: Specify request method ssl: whether to use SSL encryption request <span style="color: #ff0000;">Mknetworkoperation</span> </span></span><span style="color: #ff0000;"><span style="color: #ff0000;">*op =</span></span><span style="color: #000000;"><span style="color: #000000;"> <span style="color: #ff0000;">[engine operationwithpath:path];</span> Specifies a request closure, a successful callback for the first block, and a second failure callback. [op <span style="color: #ff0000;">addcompletionhandler</span>:</span></span>^ (mknetworkoperation *<span style="color: #000000;"><span style="color: #000000;">Operation) { </span></span></span><span style="font-size: 16px; line-height: 1.5;"><span style="font-size: 16px; line-height: 1.5;">gets the NSData class data string returned from the server Responseimage</span></span><span style="font-size: 16px;"><span style="font-size: 16px;"><span style="color: #000000;"><br></span></span></span><span style="font-size: 16px;"><span style="color: #000000;"><span style="color: #000000;">NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">responsedata:%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, <span style="color: #ff0000;">[operation responsestring]</span>);<br> <span style="color: #ff0000;">NSData</span> </span></span><span style="color: #ff0000;"><span style="color: #ff0000;">*data =</span></span><span style="color: #000000;"><span style="color: #000000;"> <span style="color: #ff0000;">[operation responsedata];<br>Parsing data<br></span>nsdictionary</span></span>*resdict =<span style="color: #000000;"><span style="color: #000000;">[nsjsonserialization jsonobjectwithdata:data options:nsjsonreadingallowfragments error:nil]; [self reloadview:resdict]; } <span style="color: #ff0000;">ErrorHandler</span>:</span></span>^ (mknetworkoperation *errorop, nserror*<span style="color: #000000;"><span style="color: #000000;">Err) {NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">mknetwork Request error:%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, [err<span style="color: #ff0000;"> localizeddescription</span>]); }];<br> <span style="color: #ff0000;">Initiate request</span> initiation [engine <span style="color: #ff0000;">enqueueoperation:op</span>]; }</span></span></span></pre><p><p><span style="font-size: 16px;">2) Implement the POST request</span></p></p><pre><span style="font-size: 16px;"><span style="color: #008000;"><span style="color: #008000;">/*</span></span><span style="color: #008000;"><span style="color: #008000;">* Start requesting web Service</span></span><span style="color: #008000;"><span style="color: #008000;">*/</span></span>-(<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">) startrequest{nsstring</span></span>*path = [[nsstring alloc] initwithformat:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">/service/mynotes/webservice.php?email=%@&type=%@&action=%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">< your 51work6.com user mailbox ></span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">JSON</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Query</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; Specify request parameters for Mknetworkoperation <span style="color: #ff0000;">nsmutabledictionary</span> </span></span><span style="color: #ff0000;"><span style="color: #ff0000;">*param = [[nsmutabledictionary alloc] init]; [param setvalue:@ "< your 51work6.com user email >" forkey:@ "email"]; [param setvalue:@ "JSON" forkey:@ "type"]; [param setvalue:@ "query" forkey:@ "action"</span></span><span style="color: #000000;"><span style="color: #000000;"><span style="color: #ff0000;">];</span> Mknetworkengine</span></span>*engine = [[mknetworkengine alloc] initwithhostname:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">51work6.com</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">customheaderfields:nil]; <span style="color: #ff0000;">mknetworkoperation</span> </span></span><span style="color: #ff0000;"><span style="color: #ff0000;">*op = [engine operationwithpath:path params:param httpmethod:@ "POST"</span></span><span style="color: #000000;"><span style="color: #000000;"><span style="color: #ff0000;">]</span>; [op addcompletionhandler:</span></span>^ (mknetworkoperation *<span style="color: #000000;"><span style="color: #000000;">Operation) {NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">responsedata:%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, [operation responsestring]); NSData</span></span>*data =<span style="color: #000000;"><span style="color: #000000;">[operation responsedata]; Nsdictionary</span></span>*resdict =<span style="color: #000000;"><span style="color: #000000;">[nsjsonserialization jsonobjectwithdata:data options:nsjsonreadingallowfragments error:nil]; [self reloadview:resdict]; } errorhandler:</span></span>^ (mknetworkoperation *errorop, nserror*<span style="color: #000000;"><span style="color: #000000;">Err) {NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">mknetwork Request error:%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, [err localizeddescription]); }]; [engine enqueueoperation:op]; }</span></span></span></pre><p><p><span style="font-size: 16px;">3 Download Data</span></p></p><p><p><span style="font-size: 16px;">The Mknetworkoperation class can not only specify the location of the download file, but also get the download progress.</span></p></p><pre><span style="font-size: 16px;">-(ibaction) OnClick: (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span><span style="color: #000000;"><span style="color: #000000;">) Sender {get cache directory Nsarray</span></span>*paths =<span style="color: #000000;"><span style="color: #000000;"> <span style="color: #ff0000;">nssearchpathfordirectoriesindomains (nscachesdirectory, nsuserdomainmask, YES);</span> NSString</span></span>*cachesdirectory = paths[<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSString</span></span>*downloadpath = [cachesdirectory stringbyappendingpathcomponent:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">test1.jpg</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSString</span></span>*path = [[nsstring alloc] initwithformat:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">/service/download.php?email=%@&filename=test1.jpg</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">< your 51work6.com user mailbox ></span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; Path</span></span>=<span style="color: #000000;"><span style="color: #000000;">[path stringbyaddingpercentescapesusingencoding:nsutf8stringencoding]; Mknetworkengine</span></span>*engine = [[mknetworkengine alloc] initwithhostname:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">51work6.com</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">customheaderfields:nil]; Mknetworkoperation</span></span>*downloadoperation =<span style="color: #ff0000;"><span style="color: #ff0000;">[engine operationwithpath:path params:nil httpmethod:@ "POST"</span></span><span style="color: #000000;"><span style="color: #000000;"><span style="color: #ff0000;">]</span>;<br>Adds a Nsoutputstream output stream object that specifies where to download the Picture. <span style="color: #ff0000;">[downloadoperation adddownloadstream:[nsoutputstream Outputstreamtofileatpath:downloadpath append:TRUE];</span> Log output of Download progress <span style="color: #ff0000;">[downloadoperation ondownloadprogresschanged:</span> </span></span><span style="color: #ff0000;"><span style="color: #ff0000;">^ (double progress) {NSLog (@ "download progress:%.2f%%", progress*100.0); _progressview.progress =</span></span><span style="color: #000000;"><span style="color: #000000;"> <span style="color: #ff0000;">progress; }];</span> Closures [downloadoperation addcompletionhandler:</span></span>^ (mknetworkoperation *<span style="color: #000000;"><span style="color: #000000;">Operation) {NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Download File finished!</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">); NSData</span></span>*data =<span style="color: #000000;"><span style="color: #000000;">[operation responsedata]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span><span style="color: #000000;"><span style="color: #000000;">(data) {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">failed to return data</span></span>Nserror *<span style="color: #000000;"><span style="color: #000000;">eror; Nsdictionary</span></span>*resdict = [nsjsonserialization Jsonobjectwithdata:data options:nsjsonreadingallowfragments error:&<span style="color: #000000;"><span style="color: #000000;">eror]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(!<span style="color: #000000;"><span style="color: #000000;">Resdict) {nsnumber</span></span>*resultcodeobj = [resdict objectforkey:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">ResultCode</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSString</span></span>*errorstr =<span style="color: #000000;"><span style="color: #000000;">[resultcodeobj errormessage]; Uialertview</span></span>*alertview = [[uialertview alloc] initwithtitle:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">error Message</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">Message:errorstr </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Delegate</span></span><span style="color: #000000;"><span style="color: #000000;">: Nil cancelbuttontitle:</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">OK</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">otherbuttontitles:nil]; [alertview show]; } } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #000000;"><span style="color: #000000;"> { </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Return Data Success</span></span>UIImage *img =<span style="color: #000000;"><span style="color: #000000;">[UIImage imagewithcontentsoffile:downloadpath]; _imageview1.image</span></span>=<span style="color: #000000;"><span style="color: #000000;">img; }} errorhandler:</span></span>^ (mknetworkoperation *errorop, nserror*<span style="color: #000000;"><span style="color: #000000;">Err) {NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">mknetwork Request error:%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, [err localizeddescription]); }]; [engine enqueueoperation:downloadoperation];}</span></span></span></pre><p><p><span style="font-size: 16px;">4 Uploading data</span></p></p><pre><span style="font-size: 16px;">-(ibaction) OnClick: (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span><span style="color: #000000;"><span style="color: #000000;">) Sender {nsstring</span></span>*filepath = [[nsbundle mainbundle] pathforresource:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">test2</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>OfType:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">jpg</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSString</span></span>*path = [[nsstring alloc] initwithformat:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">/service/upload.php</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; Nsmutabledictionary</span></span>*param =<span style="color: #000000;"><span style="color: #000000;">[[nsmutabledictionary alloc] init]; [param setValue:</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">< your 51work6.com user mailbox ></span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>Forkey:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Email</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; Mknetworkengine</span></span>*engine = [[mknetworkengine alloc] initwithhostname:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">51work6.com</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">customheaderfields:nil]; Mknetworkoperation</span></span>*op = [engine Operationwithpath:path<span style="color: #0000ff;"><span style="color: #0000ff;">params</span></span>:p Aram Httpmethod:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">POST</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; Provide the file path and file type to upload [op addfile:filepath forkey:</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">file</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">];<br>Freeze operation: automatically upload the saved data after the network is disconnected [op setfreezable:yes]; [op addcompletionhandler:</span></span>^ (mknetworkoperation *<span style="color: #000000;"><span style="color: #000000;">Operation) {NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Upload file finished!</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">); NSData</span></span>*data =<span style="color: #000000;"><span style="color: #000000;">[operation responsedata]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span><span style="color: #000000;"><span style="color: #000000;">(data) {nserror</span></span>*<span style="color: #000000;"><span style="color: #000000;">eror; Nsdictionary</span></span>*resdict = [nsjsonserialization Jsonobjectwithdata:data options:nsjsonreadingallowfragments error:&<span style="color: #000000;"><span style="color: #000000;">eror]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span><span style="color: #000000;"><span style="color: #000000;">(<span style="color: #ff0000;">resdict</span>) {parsed data nsnumber</span></span>*resultcodeobj = [resdict objectforkey:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">ResultCode</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSString</span></span>*errorstr =<span style="color: #000000;"><span style="color: #000000;">[resultcodeobj <span style="color: #ff0000;">errormessage</span>]; Custom Uialertview</span></span>*alertview = [[uialertview alloc] initwithtitle:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">error Message</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">Message:errorstr </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Delegate</span></span><span style="color: #000000;"><span style="color: #000000;">: Nil cancelbuttontitle:</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">OK</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">otherbuttontitles:nil]; [alertview show]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;"> ; }} [self seeimage]; } errorhandler:</span></span>^ (mknetworkoperation *errorop, nserror*<span style="color: #000000;"><span style="color: #000000;">Err) {NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">mknetwork Request error:%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span></span><span style="color: #000000;"><span style="color: #000000;"> <span style="font-size: 16px;">, [err localizeddescription]); }]; [engine enqueueoperation:op];}</span><br></span></span></pre><p><p></p></p><p><p>IOS Development Guide Chapter 15th access to Web service using Lightweight network request Architecture Mknetworkkit</p></p></span>