IOS Development Guide Chapter 15th access to Web service using Lightweight network request Architecture Mknetworkkit

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>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.