2016-09-20 10 views
0

これはやや単純な質問を投稿する前に少なくとも2時間は試しました。次のコードは、jsonファイルがアプリケーションバンドル内に存在する場合に機能します。アプリケーションバンドル以外のファイルからjsonを読んでください

 if let file = Bundle.main.url(forResource: "data", withExtension: "json") {.... 

は私が

let myData = try Data(contentsOf: file as URL) 

私は/ライブラリ/ Application Support/AppFolder/data.json」からファイルの同一のコピーにアクセスすることはできません...このようJSONファイルを読んでいます" NSURL.init(fileURLWithPath: "your_path")

string:与えられた文字列を表しNSURLを生成します。

次は

let filepath = "/Library/Application Support/AppFolder/data.json" 
    if let file = NSURL(string: filepath) {... 

答えて

1

別に、ファイルシステム内のURLは、常にNSURL(fileURLWithPath...)で作成しなければならないという事実から、それを1つの専用のAPIを使用して、特定のシステムフォルダを取得することをお勧めします:

let applicationSupportFolderURL = try! NSFileManager.defaultManager().URLForDirectory(.ApplicationSupportDirectory, 
                   inDomain: .LocalDomainMask, 
                 appropriateForURL: nil, 
                   create: false) 
let jsonDataURL = applicationSupportFolderURL.URLByAppendingPathComponent("AppFolder/data.json") 

か、かなり短いスウィフト3(中)

let applicationSupportFolderURL = try! FileManager.default.url(for: .applicationSupportDirectory, 
                   in: .localDomainMask, 
                appropriateFor: nil, 
                  create: false) 
let jsonDataURL = applicationSupportFolderURL.appendingPathComponent("AppFolder/data.json") 
+0

私は迅速に3に準拠するように構文を更新する必要がありました。 "タイプURLの値にメンバーがありませんURLbyAppendingPathComponent"というエラーが表示されます。 – nyitguy

+0

Swift 3バージョンを追加して回答を更新しました。 – vadian

+0

これは完全に動作しますが、どのように "/Volumes/VolumeName/data.json"というディレクトリを指すことができますか? – nyitguy

0

てみは動作しません。したがって、 "http://www.google.com"のような文字列とURLはhttp://www.google.comを表します。

fileURLWithPath:は、URLではなくパスをとり、file:// URLを使用してパスを表すNSURLを生成します。だから、/foo/bar/bazとすれば、URLはfile:///foo/bar/bazとなります。

関連する問題