サンドボックス(Documents)のパスの取得方法
昨日の記事に誤りがあったので訂正。
試してみたけれど、別にクラッシュはしなかった。
……っかしーなー、なんたらブリッジエラーが出たと思ったんだけどなー。
以下は/Documents
のディレクトリパスを取ろうとしているコードです。
NSSearchPathForDirectoriesInDomains
よりURLsForDirectory
、URLForDirectory
の方が推奨されているらしいけど、そこは気にしない方針で。
if let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as? [String] { println("1") } if let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as? [NSString] { println("2") } if let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as? [NSURL] { println("3") } if let path = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) as? [String] { println("4") } if let path = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) as? [NSString] { println("5") } if let path = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) as? [NSURL] { println("6") }
さて、ここで問題です。
上記コードの中で、実際にprintln
が実行されるのはどれでしょうか?
はい、正解は、1、2、6でしたー。
いずれのメソッドも、宣言の状態での戻り値は[AnyObject]
なんです、が。
URLsForDirectory
のレファレンスを読むと、Return Valueなる項目がありまして、なんとそこにはNSURL
の配列がどーのこーの、と書いてあります!
……つまり、どういうことなんだぜ?
そもそもさー、ディレクトリパスってさ、文字列で返ってこないなら何で返ってくるのよ。
アドレス?
だからNSURL
ってか?
百歩譲ってNSURL
で取れるのはいいとしてさ、どうしてString
はダメなのよ?
まあ、実験してみたらこういう結果になりました。
ディレクトリパスの取り扱いには注意しましょう、っていう話でした。
以上。