【木曜日】HTTP通信の続き
睡眠時間7時間。途中、咳をして起きたので睡眠の質は悪そう。
今日もきっと、ウトウトしてしまうのだろう。
昨日の続き。
HTTP通信を並列処理で行い、テキストファイルの中身を取得する勉強。
教科書のソースをまんま打つ。
▼こんなかんじ
▼読み込みをタップすると、とあるサイトのテキストファイルの中の文字が表示された
ここで注意点。
アプリを作る時はネットワークに繋がらない場所にいる場合は通信エラーとなってしまうことを考慮しなくてはならないとのこと。
先生の説明中にウトウト。。
毎度ですんません。
次に、dispach_asyncをしないで大きなファイルをネットから取得するとどうなるかの勉強。
まず、読み込むファイルを大きなサイズに変更してから、
↓そして、この部分を
-(IBAction)clickButton:(UIButton*)sender { if(sender.tag==BTN_READ) { // インジケーターのアニメーションの開始 [_indicator startAnimating]; // グローバルキューで実行する処理を指定 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{ // URLリクエストの生成 キャッシュの機能が搭載されている NSURLRequest* request=[NSURLRequest requestWithURL:[NSURL URLWithString:URL_TEST] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; // タイムアウト時間30秒 // HTTP通信 NSError* error=nil; NSData* data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; // メインキューで実行する処理を指定 dispatch_async(dispatch_get_main_queue(), ^{ // UIの更新 if (error == nil) { _textField.text = [self data2str:data]; } else { _textField.text=@"通信エラー"; } // インジケーターのアニメーションの停止 [_indicator stopAnimating]; }); }); } }
↓こうしました
// ボタンクリック時に呼ばれる -(IBAction)clickButton:(UIButton*)sender { if(sender.tag==BTN_READ) { // インジケーターのアニメーションの開始 [_indicator startAnimating]; // URLリクエストの生成 キャッシュの機能が搭載されている NSURLRequest* request=[NSURLRequest requestWithURL:[NSURL URLWithString:URL_TEST] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; // タイムアウト時間30秒 // HTTP通信 NSError* error=nil; NSData* data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; // ここ、追加した NSLog(@"読み込み終わり%d",data.length); } }
すると、読み込みボタンをタップすると、しばらくタップしたままの状態(ボタンの色が青くなる)が続くではありませんか。
▼この状態ね
いやはや、なにがどうなったのかさっぱりわかってません。。
授業についていけなさすぎて先生に質問できない。
まあいいさ。よくないけど。
次、郵便番号のAPIを使ってみる勉強。
ブラウザで
http://zip.cgis.biz/csv/zip.php?zn=1000001
と、打つと、〒100-0001の住所のデータが表示される。これを使ってみるらしい。
↓このデータね
"ZipSearchXML","1.01","http://zip.cgis.biz/csv/zip.php?zn=1000001","1000001","none","1","1000001","0","1" "トウキョウト","チヨダク","チヨダ","none","東京都","千代田区","千代田","none"
このデータを、改行で分割→2行目取得→カンマで分割→5番目(都道府県)と6番目(市区町村)と7番目(町域)を取得→両側のダブルクォーテーション除去 そうするとやっとお目当ての「東京都千代田区千代田」が持ってこれるわけで…
たいへんだな。
で、渡されたプリントに書いてある通りにソースを打つんだけど、これが今までで一番長い量でたいへん。
小さい頃、ファミリーベーシックで遊んだときに松田聖子の曲を演奏するプログラムのソースの長さにげんなりして全てを諦めたことを思い出す。
はい、午後の授業開始。
続きを打つ打つ打つ打つ打つ打つ打つ打つ打つ。
▼こんなんできました(古っ)
▼読み込みボタンをタップすると住所が出てくるぞ
次に、電気予報アプリを作る課題。
こちらの電力使用量のデータを使ってみるそうです。
http://tepco-usage-api.appspot.com/quick.txt
よーい、どん。
うーん、難しい…
入力の途中で授業終了時間。