NSURLクラス
解説
iPad Pro Wi-Fiモデル 128GB ML0R2J/A ゴールド(iOS)
- 出版社/メーカー: Apple Computer
- メディア: Personal Computers
- この商品を含むブログを見る
継承 | NSObject |
準拠 | NSCopying |
NSURLHandleClient | |
NSSecureCoding | |
NSObject (NSObject) |
フレームワーク | /System/Library/Frameworks/Foundation.framework |
使用可能 | OS X 10.0以降 |
iOS 2.0以降 | |
定義 | NSURL.h |
watchOS
developer.apple.com
tvOS
developer.apple.com
概要
ファイル参照などを表すためのURLオブジェクトです。
C言語のフレームワークである、Core FoundationのCFURLRefとトールフリーブリッジです。ARC環境以外ではそのまま使用できます。
どちらかのフレームワークにしかないメソッド・関数を使いたい場合、キャストして使うことが出来ます。
ARC環境では、管理対象のオブジェクトのキャストに__bridge、__bridge_retained、__bridge_transferが必要になります。
ファイルがある場所の表し方として以下の3つの方法があります。
パスベースURL: file://localhost/Users/steve/Documents/MyFile.txt
ファイル参照URL: file:///.file/id=6571367.2773272/
文字ベースパス: /Users/steve/Documents/MyFile.txt
NSURLの作成
指定のURL文字列からNSURLオブジェクトを作成するには(+ URLWithString)メソッドを使います。同様のインスタンスメソッドとして、指定のURL文字列からNSURLオブジェクトを初期化するメソッドとして(– initWithString)メソッドがあります。
URL文字列からNSURLオブジェクトを作成
#pragma mark NSURL URLWithString: -(void)method001 { NSHTTPURLResponse *aResponse; NSError *anError; NSURL *url = [NSURL URLWithString:@"http://www.apple.com/"]; NSURLRequest *req = [NSURLRequest requestWithURL:url]; NSData *data = [NSURLConnection sendSynchronousRequest:req returningResponse:&aResponse error:&anError]; if (!anError) { NSLog(@"data: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); NSLog(@"%s %@",__FUNCTION__,[anError description]); NSLog(@"status code: %d", [aResponse statusCode]); } else { NSLog(@"error: %@", anError); } }
上記の派生形として、スキーム(httpやhttpsなど)とホスト(www.oomori.comなど)とパス(/index.htmlなど)からNSURLオブジェクトを作成するメソッドとして(– initWithScheme:host:path)があります。
ベースURLとパスでNSURLオブジェクトを作成するメソッドは(+ URLWithString:relativeToURL)で同様のインスタンスメソッドとしてベースURLとパスでNSURLオブジェクトを初期化する(– initWithString:relativeToURL)メソッドがあります。
ファイルパスからNSURLオブジェクトを作成するメソッドは(+ fileURLWithPath)で同様のインスタンスメソッドとしてファイルパスからNSURLオブジェクトを初期化する(– initFileURLWithPath)メソッドがあります。
上記の派生系でディレクトリ(フォルダ)かを指定する事ができるメソッド(+ fileURLWithPath:isDirectory)があり、同様のインスタンスメソッドとして初期化する(– initFileURLWithPath:isDirectory)があります。
配列(NSArray)で指定されたパスからNSURLオブジェクトを作成するには(+ fileURLWithPathComponents)メソッドを使います。ディレクトリ(フォルダ)名やファイル名の文字列オブジェクトが入った配列を"/"で連結したパスからNSURLオブジェクトを作成します。
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *filename = @"testWritecharset.bitmap"; NSURL *aURL = [NSURL fileURLWithPathComponents:[NSArray arrayWithObjects:documentsDirectory, filename, nil]];
上記のコードを実行すると
file://localhost/var/mobile/Applications/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/Documents/testWritecharset.bitmap
のような内容を持つNSURLオブジェクトが作成できます。(XXXの部分はダミーです)
文字列からURLを作成する場合、パーセントエスケープして渡してやらないといけません。パーセントエスケープとはスペースや記号などを「% + 16進数で表現される文字コード」で変換して表現したものです。NSStringに-stringByAddingPercentEscapesUsingEncodingというメソッドがありますので事前に変換してNSURLのメソッドに渡します。
ただし、NSStringの-stringByAddingPercentEscapesUsingEncodingは一部の文字($&+,/:;=?@)がエスケープされないという問題があり、CFURLCreateStringByAddingPercentEscapes()がよく使われているようです。
ブックマークデータからNSURLオブジェクトを作成するクラスメソッドが(+ URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error)で同様のインスタンスメソッドが(– initByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error)です。
オブジェクトの比較
(– isEqual)メソッドはURLオブジェクトを比較します。絶対パスは同じでもURLWithString:relativeToURL:で作成したURLオブジェクトとURLWithStringで作成したNSURLオブジェクトは同じではありません。
NSURLオブジェクトのチェック
URLのリソースに到達できるかをチェックして返すメソッドは(– checkResourceIsReachableAndReturnError)を使います。ファイル参照URLかどうかを返すメソッドは(– isFileReferenceURL)です。ファイル参照URLかを返すメソッドは(– isFileURL)です。
URLの部分へのアクセス
絶対パスを取得するには(– absoluteString)メソッドを使用します。URL表現の絶対パスを取得する場合は(– absoluteURL)メソッドを使用します。
オブジェクトがhttp://www.apple.com/index.html#123である場合、ベースURL(この場合ではhttp://www.apple.com)を取り出すには(– baseURL)メソッドを使用します。アンカー(この場合では123)を取り出すには(– fragment)メソッドを使います。ホスト(www.apple.com)の取り出しには(– host)メソッドを使います。
オブジェクトが http://www.oomori.com/index.html?name=oomori&age=44 の内容を持つ場合、最後のパスコンポーネント(この場合ではindex.html)を取り出すには(– lastPathComponent)メソッドを使用します。クエリ(この場合ではname=oomori&age=44)を取り出すには(– query)メソッドを使用します。
オブジェクトがhttp://www.oomori.com/index.html;param?name=oomori&age=44の内容を持つ場合、パラメータ(この場合ではparam)を取り出すには(– parameterString)メソッドを使用します。
オブジェクトが ftp://user:password@www.oomori.com/index.htmlの内容を持つ場合、パスワード(password)を取り出すには(– password)メソッドを使用します。ユーザー(user)を取り出すには(– user)メソッドを使用します。
オブジェクトがhttp://www.oomori.com/index.html;param?name=oomori&age=44の内容を持つ場合、パス文字列(/index.html)を取り出すには(– path)メソッドを使用します。パスを配列("/","index.html")で取り出すには(– pathComponents)メソッドを使います。
ファイルパスの拡張子(html)を取り出すには(– pathExtension)メソッドを使用します。
オブジェクトがhttp://www.oomori.com:8080/index.htmlの内容を持つ場合、スキーマ(http)を取り出すには(– scheme)メソッドを使用します。ポートを取り出すには(– port)メソッドを使用します。
相対パスを返すメソッドは、ベースURLを持つかどうかで挙動が変わってきます。オブジェクトをhttp://www.oomori.com/index.htmlの文字列で作成した場合は(– relativePath)メソッドで(/index.html)が返され、+URLWithString:relativeToURLで作成した場合には(index.html)が返されます。
(– relativeString)メソッドを使った場合には下記の通りになります。
#pragma mark NSURL relativeString -(void)method025 { NSURL *aURL = [NSURL URLWithString:@"http://www.oomori.com/index.html"]; NSLog(@"%s %@",__FUNCTION__,[aURL relativeString]); //=>http://www.oomori.com/index.html NSURL *baseUrl = [NSURL URLWithString:@"http://www.oomori.com/"]; NSString *pathString = @"index.html"; NSURL *bURL = [NSURL URLWithString:pathString relativeToURL:baseUrl]; NSLog(@"%s %@",__FUNCTION__,[bURL relativeString]); //=>index.html }
オブジェクトがhttp://www.oomori.com/index.html?name=oomori&age=44の内容を持つ場合、(– resourceSpecifier)メソッドを使う事で(//www.oomori.com/index.html?name=oomori&age=44)といった文字列が取得できます。(– standardizedURL)メソッドを使うと.や..を取り去った文字列を取得する事ができます。
ファイルURLの修正や変換
オブジェクトがファイルパスのURLである場合に文字列でパスを取り出すには(– filePathURL)メソッドを使います。ファイルパスでない場合にはnullが返されます。
オブジェクトがファイルパスのURLである場合にファイル参照URL形式(file:///.file/id=234881025.13835283のような形式)の文字列を取り出すには(– fileReferenceURL)メソッドを使います。ファイルパスでない場合にはnullが返されます。
末尾にパスコンポーネントを追加した新しいNSURLを返すには(– URLByAppendingPathComponent)メソッドを使います。追加の引数としてisDirectory:にYESを渡すとディレクトリになるメソッド(– URLByAppendingPathComponent:isDirectory)もあります。
最後のパスコンポーネントを削除するには(– URLByDeletingLastPathComponent)メソッドを使います。
最後のパスコンポーネントに拡張子を追加するためには(– URLByAppendingPathExtension)メソッドを使用し、拡張子を削除するには(– URLByDeletingPathExtension)メソッドを使います。
ブックマークデータ
ブックマークデータを作成するには(+ bookmarkDataWithContentsOfURL:error)メソッドを使います。オプションを指定する事ができるメソッド(– bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error)もあります。ブックマークデータを書き出すには(+ writeBookmarkData:toURL:options:error)メソッドを使用します。
ファイルシステムリソースの取得とセット
●ファイルシステムの情報を得ます。
ファイル属性の取得には(– getResourceValue:forKey:error)メソッドを使います。プロパティによってはセットできないもの(Read only)もありますが、(– setResourceValue:forKey:error)メソッドでセットできます。複数の属性の取得、設定にはそれぞれ(– resourceValuesForKeys:error)、(– setResourceValues:error:)メソッドを使います。ブックマークデータから属性値を得るにはクラスメソッド(+ resourceValuesForKeys:fromBookmarkData)を使用します。
属性のキーを以下に示します。
NSURLFileSizeKey
NSURLFileAllocatedSizeKey
NSURLTotalFileSizeKey
NSURLTotalFileAllocatedSizeKey
NSURLIsAliasFileKey
NSURLNameKey
ファイルやフォルダの名称
NSString
NSURLLocalizedNameKey
ファイルやフォルダのローカライズ名、または拡張子非表示の際の名称
NSString
NSURLIsRegularFileKey
通常のファイルやフォルダかどうか
bool値のNSNumber
NSURLIsDirectoryKey
フォルダかどうか
bool値のNSNumber
NSURLIsSymbolicLinkKey
シンボリックリンクかどうか
bool値のNSNumber
NSURLIsVolumeKey
ボリュームか
bool値のNSNumber
NSURLIsPackageKey
パッケージか
bool値のNSNumber
NSURLIsSystemImmutableKey
システム不変ビットが設定されているか
bool値のNSNumber
NSURLIsUserImmutableKey
ユーザー不変ビットが設定されているか
bool値のNSNumber
NSURLIsHiddenKey
非表示か隠れているか
bool値のNSNumber
NSURLHasHiddenExtensionKey
拡張子が隠されているか
bool値のNSNumber
NSURLCreationDateKey
作成日
NSDate
NSURLContentAccessDateKey
最終アクセス日
NSDate
NSURLContentModificationDateKey
内容の修正日
NSDate
NSURLAttributeModificationDateKey
属性修正日
NSDate
NSURLLinkCountKey
ハードリンク数
整数のNSNumber
NSURLParentDirectoryURLKey
このNSURLが属する親ディレクトリのURL
NSURL
NSURLVolumeURLKey
このNSURLが属するボリュームのURL
NSURL
NSURLTypeIdentifierKey
ファイルID
NSString
NSURLLocalizedTypeDescriptionKey
ローカライズされたタイプ
NSString
NSURLLabelNumberKey
ラベル番号
整数のNSNumber
NSURLLabelColorKey
ラベルカラー、iOSではUIColorでセットはできるようですが有効ではないようです。
UIColor
NSURLLocalizedLabelKey
ローカライズされたラベル
NSString
NSURLEffectiveIconKey;
通常のアイコン画像、iOSでは有効ではないようです。
NSURLCustomIconKey
カスタムアイコン画像、iOSでは有効ではないようです。
NSURLFileResourceIdentifierKey
ファイルリソースID
id
NSURLVolumeIdentifierKey
ボリュームID
id
NSURLPreferredIOBlockSizeKey
読み書きする場合の最適なブロック数
NSNumber
NSURLIsReadableKey
現在のプロセスかどうか。EUIDで判断されます。
bool値のNSNumber
NSURLIsWritableKey
書き込み可能かどうか。書き込み可能ならYESです。
bool値のNSNumber
NSURLIsExecutableKey
実行可能かどうか。実行可能ならYESです。
bool値のNSNumber
NSURLIsMountTriggerKey
トリガディレクトリかどうか。トリガディレクトリにアクセスするとファイルシステムはマウントしようと試みます。
bool値のNSNumber
NSURLFileSecurityKey
ファイルシステムセキュリティ
NSFileSecurity
NSURLIsExcludedFromBackupKey
バックアップするデータから除外されているかどうか。バックアップしないならYESです。
bool値のNSNumber
NSURLFileResourceTypeKey
リソースタイプ
NSString
リソースタイプには以下の種類があります。
NSURLFileResourceTypeNamedPipe
NSURLFileResourceTypeCharacterSpecial
NSURLFileResourceTypeDirectory
NSURLFileResourceTypeBlockSpecial
NSURLFileResourceTypeRegular
NSURLFileResourceTypeSymbolicLink
NSURLFileResourceTypeSocket
NSURLFileResourceTypeUnknown
NSURLVolumeIsEjectableKey
リソースが含まれるボリュームはソフトウエアのコントロールで取り出し可能かどうか。
bool値のNSNumber
NSURLVolumeIsInternalKey
リソースが含まれるボリュームは内蔵ディスク(内部バス接続か)どうか。
bool値のNSNumber
SURLVolumeUUIDStringKey
リソースが含まれるボリュームのUUID文字列。
NSString
適合するプロトコル
メソッド
NSURLの作成
– initWithScheme:host:path
+ URLWithString
– initWithString
+ URLWithString:relativeToURL
– initWithString:relativeToURL
+ fileURLWithPath:isDirectory
– initFileURLWithPath:isDirectory
+ fileURLWithPath
– initFileURLWithPath
+ fileURLWithPathComponents
+ URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error
– initByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error
オブジェクトの比較
Querying an NSURL
– checkResourceIsReachableAndReturnError
– isFileReferenceURL
– isFileURL
URLの部分にアクセス
– absoluteString
– absoluteURL
– baseURL
– fragment
– host
– lastPathComponent
– parameterString
– password
– path
– pathComponents
– pathExtension
– port
– query
– relativePath
– relativeString
– resourceSpecifier
– scheme
– standardizedURL
– user
ファイルURLの修正・変換
– filePathURL
– fileReferenceURL
– URLByAppendingPathComponent
– URLByAppendingPathComponent:isDirectory
– URLByAppendingPathExtension
– URLByDeletingLastPathComponent
– URLByDeletingPathExtension
– URLByResolvingSymlinksInPath
– URLByStandardizingPath
ブックマークデータでの動作
+ bookmarkDataWithContentsOfURL:error
– bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error
+ writeBookmarkData:toURL:options:error
サブクラス化の注意