你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Snail—iOS網絡學習之得到網絡上的數據

Snail—iOS網絡學習之得到網絡上的數據

編輯:IOS開發綜合

在開發項目工程中,尤其是手機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
 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved