在開發項目工程中,尤其是手機APP,一般都是先把界面給搭建出來,然後再從網上down數據 來填充
那麼網上的數據是怎麼得來的呢,網絡上的數據無非就常用的兩種JSON和XML
現在 大部分都是在用JSON
網絡上傳輸數據都是以二進制形式進行傳輸的 ,只要我們得到網上的二進制數據
如果它是JSON的二進制形式 那麼我們就可以用JSON進行解析 如果是XML,那麼我們可以用XML解析
關鍵是怎麼得到網上的二進制數據呢
設計一個常用的工具類 很簡單 給我一個接口(URL),那我就可以用這個類得到二進制文件
新建了一個類WJJHttpReques 繼承NSObject
下面是.h的代碼
#import@interface WJJHttpRequest : NSObject //請求的接口 @property (nonatomic,copy) NSString * httpUrl; //網上下載的二進制文件 @property (nonatomic,strong) NSMutableData * data; //代理 @property (nonatomic,strong) id delegate; //代理的方法 @property (nonatomic,assign) SEL method; //開始下載數據 - (void)start; //斷開連接 - (void)stop; @end
#import WJJHttpRequest.h #import WJJRequestManager.h @interface WJJHttpRequest (){ //聲明connection為全局變量 NSURLConnection * _connection; } @end @implementation WJJHttpRequest //開始下載數據 - (void)start{ NSURL * url = [NSURL URLWithString:self.httpUrl]; NSURLRequest * request = [[NSURLRequest alloc] initWithURL:url]; //只要下面執行 那麼代理方法就會執行了 然後開始從網上down數據 _connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; } #pragma mark NSURLConnectionDataDelegate method //收到服務器的響應調用的代理方法 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ NSLog(@收到服務器響應); if (self.data == nil) { self.data = [[NSMutableData alloc] init]; }else{ [self.data setLength:0]; } } //接受服務器的二進制文件 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@接受到了服務器的二進制數據); [self.data appendData:data]; } //如果成功了 參數就是YES 反之則是NO - (void)loadFinished:(BOOL)success{ if (!success) { [self.data setLength:0]; } //檢測要接收數據的回調對象 是否有method這個方法 if ([self.delegate respondsToSelector:self.method]) { //如果有就執行這個方法 並且把自己當參數傳過去 [self.delegate performSelector:self.method withObject:self]; } //這個是我自己設計的Request管理類 下面這句話的意思就是把 數據傳給那些需要數據的地方後,把這個連接斷開 [[WJJRequestManager sharedManager] removeTask:self.httpUrl]; } //接受數據完成時調用的方法 - (void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSLog(@數據接受完成); [self loadFinished:YES]; } //接收數據失敗時調用的方法 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@數據請求失敗); [self loadFinished:NO]; } //停止下載數據 - (void)stop{ if (_connection) { //取消連接 [_connection cancel]; } _connection = nil; } @end