技術はメシのタネ

底辺プログラマで技術の向上を目指しているけれどやりたい事が無くて困っている

サンドボックス(Documents)のパスの取得方法

昨日の記事に誤りがあったので訂正。
試してみたけれど、別にクラッシュはしなかった。
……っかしーなー、なんたらブリッジエラーが出たと思ったんだけどなー。

以下は/Documentsのディレクトリパスを取ろうとしているコードです。
NSSearchPathForDirectoriesInDomainsよりURLsForDirectoryURLForDirectoryの方が推奨されているらしいけど、そこは気にしない方針で。

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はダメなのよ?

まあ、実験してみたらこういう結果になりました。
ディレクトリパスの取り扱いには注意しましょう、っていう話でした。

以上。