// HTTPからNSURL作成例 NSURL *url = [NSURL URLWithString:@"http://ellidanus-b.ddo.jp/"];
// HTTPからNSURL作成例 NSURL *url = [NSURL URLWithString:@"http://ellidanus-b.ddo.jp/"]; // URLからサーバ名を取得してみよう。 NSLog(@"%@", [url host]);
ここ、 URLスキーム(httpとか)を欠いている状態でもファイルとはみなさない のに要注意。あくまで スキームとしてFile:〜が提示されている時だけFileURLとみなす ようだ。
NSURL *url = [NSURL URLWithString:@"http://ellidanus-b.ddo.jp/"]; NSURL *url2 = [NSURL URLWithString:@"file:///index.html"]; // これはファイルのURLか?(Boolなので返り値はcharで?) NSLog(@"isFileURL: %d", [url isFileURL]); // これは偽 BOOL y = [url2 isFileURL]; NSLog(@"isFileURL: %d",y); // これは真
ネタ元 | http://qiita.com/uasi/items/f7bdf16a343c7264c8a5 |
+[NSURL fileURLWithPath:] は、 +[NSURL URLWithString:] と違って path に含まれる URL 特殊文字をエスケープする(?→%3Fなど)。またそれが返す NSURL オブジェクトは -isFileURL が真になっていて、 -URLByAppendingPathComponent: などの引数も同様にエスケープする。File URL にパラメータ文字列(例:?key=value)を含めるには、次ように +[NSURL URLWithString:relativeToURL:] を使う:
// こうする NSURL *fileURL = [NSURL fileURLWithPath:path]; NSURL *URLWithParam = [NSURL URLWithString:@"?key=value" relativeToURL:fileURL];
「どこにもSafariって書いてないじゃん」って声がありそうだけど、これってつまり「環境指定のブラウザで開く」なんだよね。iOSデバイスでは結果としてSafariが呼ばれるだけ。
iOS用開発しかシラネって人には無意味な情報かもだけど、複数の環境で開発する人なら「(
でもまぁ、名前ったってキタブ・アル・アジフをネクロノミコンって呼び替えるようなもので はあるか。うむ。
なおURLオブジェクトの定義やなんかの考え方はOOPによくある形なので説明不要。
NSURL *url = [NSURL URLWithString:@"http://www.apple.com/jp/"]; UIApplication *app = [UIApplication sharedApplication]; [app openURL:url];
外部ブラウザでなく、iOS上のWebView上にロードしてみよう。あまり変わらないけどな。
なお、webViewには myWebViewという名をつけてある。
// URLオブジェクトを作る NSURL *url = [NSURL URLWithString:@"http://www.apple.com/jp/"]; // URLリクエストを作る NSURLRequest *urlreq = [NSURLRequest requestWithURL:url]; // WebビューにWebページを読み込む。 [_myWebView loadRequest:urlreq];
パラメータを含む場合やPOSTの場合は少し変わってくるので注意。
まず応答の収納場所を作る。応答は割り込みで返ってくるので単純な式で代入できないためだ。ここでは簡単にプロパティ「string」を作ってみた。
次に実際の処理。指定URLを組み込んでリクエスト発行するだけなので、voidで作成。
あとは見れば想像つくと思う。
HTTPレスポンスをUTF-8エンコーディングとして取り出しているが、これは試験データにUTF-8のRSSデータを使ったため。もちろんCP932の時などはそれに応じたものにしなければならない。
あと、statusコードの200の意味についてはHTTPの応答コードである。言うまでもないが、あえて書けば「正常終了」って意味である。ここが500や404、403等だとデータが正しく取得できていないのでデータは保存されない。
#import "testappViewController.h" @interface testappViewController () @property (retain, readwrite, nonatomic) NSString *string; - (void) stringURL:(NSString *)url; @end @implementation testappViewController - (void)viewDidLoad { [super viewDidLoad]; // URLにパラメータが含まれるとき、POST等ではやり方が異なる。 [self stringURL:@"http://取得元データのURL"]; NSLog(@"END\n------\n%@\n---------",_string); } - (void)stringURL:(NSString *)url{ NSURLSession *aSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; [[aSession dataTaskWithURL:[NSURL URLWithString:url] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (((NSHTTPURLResponse *)response).statusCode == 200) { if (data) { NSString *contentOfURL = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; //NSLog(@"%@", contentOfURL); _string = contentOfURL; NSLog(@"%@", _string); NSLog(@"--:)-------------"); } } }] resume]; }