2017-09-11 15 views
0

画像を保存する私の機能は次のとおりです。NSFileManagerファイル作成に失敗する

static func getDirectoryPath() -> String { 
    let path = (NSSearchPathForDirectoriesInDomains(.picturesDirectory, .userDomainMask, true))[0] 
    return path 
} 

static func savePhoto(with path: String, image: UIImage) { 
    let fM = FileManager.default 
    let path = getDirectoryPath() + path 
    let data = UIImageJPEGRepresentation(image, 0.5) 
    let success = fM.createFile(atPath: path, contents: data, attributes: nil) 
    print("File creation was \(success)") 
} 

、その後、私は、ファイルを作成する呼び出すと、私はfalseを返しますが毎回この

 let path = "/SpotCheck_\(spot.name)_Photo\(indx).jpg" 
     PhotoManager.savePhoto(with: path, image: photo) 

ようにそれをされて呼んでいると写真が保存されません。

EDIT:問題は、picturesDirectoryではなくdocumentDirectoryである必要がある2行目です。以下に示すように、

let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))[0] 
+0

このiOSまたはmacOSですか?なぜ 'Data write'メソッドの代わりに' FileManager'を使うのですか? – rmaddy

+0

サンドボックスの設定を確認しましたか? – Bob

+0

これはiOS用のもので、使用する方法(ファイルマネージャまたは書き込み)が不明でした。私は書き込みメソッドが私が望むことをするかどうかを見てみることができますが、ファイルマネージャがうまくいかない理由を知っていますか?また、ある方法を他の方法よりも使用する理由もあります。 – LoganHenderson

答えて

5

iOSアプリはサンドボックスで実行されます。ピクチャフォルダに書き込むことはできません。

ユーザーの写真ライブラリに画像を追加する場合は、PHPhotoLibraryまたはUIImageWriteToSavedPhotosAlbumを使用します。

イメージを自分のアプリに保存したい場合は、そのファイルをドキュメントフォルダに保存します。 FYI

- iOS版でNSSearchPathForDirectoriesInDomainsを使用して、唯一の有益なディレクトリは、次のとおりです。

  • libraryDirectory
  • documentDirectory
  • cachesDirectory
  • applicationSupportDirectory

はすべて他の人が中にのみ有用ですマックOS。

+0

iOSのドキュメントディレクトリに画像を書き込むことはできますか?私は自分のアプリケーションに写真を保存したいが、写真のライブラリに保存しない。 – LoganHenderson

+2

これはまったく異なっています。はい。ドキュメントフォルダは、すべてのアプリのサンドボックスに含まれており、アプリがそのデータを書き込むための通常の場所です。私はこれに対する私の答えを更新しました。 – rmaddy

関連する問題