您好,登錄后才能下訂單哦!
網絡上搜索關于ios網絡編程基本就首頁全是講的同一篇文章,被轉爛了。
找了半天沒找到源文出處。下面是可以參考的一部分。
主要將了兩部分:1.網絡檢測;2.簡單的NSURLConnection鏈接以及設置代理。
問了下朋友,基本說現在都用
HTTP包裝開源項目ASIHTTPRequest。
但這邊我們還是從最原始的框架提供的API入手,后邊我再去看下這個。
這邊我就以最簡單的例子來引入幾個常用的API中的類。
[cpp] view plaincopy
//
// NLViewController.m
// NetWorkTest
//
// Created by Nono on 12-5-16.
// Copyright (c) 2012年 NonoWithLilith. All rights reserved.
//
#import "NLViewController.h"
@interface NLViewController ()
@end
@implementation NLViewController
@synthesize label = _label;
@synthesize data = _data;
@synthesize connection = _connection;
- (void)dealloc{
[self.label release];
[self.data release];
[super dealloc];
}
- (void)viewDidLoad
{
[super viewDidLoad];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 10.0, 300.0, 400)];
self.label = label;
label.textAlignment = UITextAlignmentCenter;
[label setNumberOfLines:0];
label.lineBreakMode = UILineBreakModeWordWrap;
self.label.text = @"正在在請求數據";
[self.view addSubview:label];
[label release];
//step 1:請求地址
NSString *urlString = @"http://www.google.com";
NSURL *url = [NSURL URLWithString:urlString];
//step 2:實例化一個request
NSURLRequest *requrst = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
//step 3:創建鏈接
self.connection = [[NSURLConnection alloc] initWithRequest:requrst delegate:self];
if ( self.connection) {
NSLog(@"鏈接成功");
}else {
NSLog(@"鏈接失敗");
}
[url release];
[urlString release];
[requrst release];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
self.label = nil;
self.data = nil;
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
#pragma mark-
#pragma NSUrlConnectionDelegate methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//接受一個服務端回話,再次一般初始化接受數據的對象
NSLog(@"返回數據類型:%@",[response textEncodingName]);
NSMutableData *d = [[NSMutableData alloc] init];
self.data = d;
[d release];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//接受返回數據,這個方法可能會被調用多次,因此將多次返回數據加起來
NSUInteger datalength = [data length];
NSLog(@"返回數據量:%d",datalength);
[self.data appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//連接結束
NSLog(@"%d:",[self.data length]);
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *mystr = [[NSString alloc] initWithData:_data encoding:enc];
// string i
NSLog(@"最后的結果:%@",mystr);
self.label.text = mystr;
[mystr release];
[self.connection release];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
//鏈接錯誤
}
@end
簡單說下:
1.最簡單的網絡鏈接,一個url,一個request,一個connection以及一個response返回。默認的是get請求。
2.data轉碼問題,這個一開始有點糾結。即,在最后我們要把NSData轉化成NSString時候需要一個轉碼格式,一開始我習慣性的用了UTF-8,
然后發現轉化后String 是Null,于是去打印了下請求返回的一些參數,顯示的是GB2312~。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。