userdefaultsでイメージを保存し、このコードで別のビューで使用しますが、エラーが表示されます。イメージを保存するには
UserDefaults.standard.set(img , forKey : "simg")
あなたがNSUserDefaults
に直接UIImageを保存することはできません私に
userdefaultsでイメージを保存し、このコードで別のビューで使用しますが、エラーが表示されます。イメージを保存するには
UserDefaults.standard.set(img , forKey : "simg")
あなたがNSUserDefaults
に直接UIImageを保存することはできません私に
これは私がやる方法です。
:func cacheImageAsPNG(image: UIImage, localID: String) {
let userDocumentsURL = URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
if let imageData = UIImagePNGRepresentation(image) {
let filename = userDocumentsURL.appendingPathComponent("\(localID).png")
if FileManager.default.createFile(atPath: filename.path, contents: imageData, attributes: nil) {
print("wrote file:\n\(filename.path)")
} else {
print("couldn't write the file:\n\(filename.path)")
}
}
}
あなたはそれがピークメモリ使用量の時間の間、システムによって消去したい場合は、キャッシュディレクトリはより良い場所です:あなたはそれを保存するための複数の場所を持って、ユーザーのドキュメントフォルダは、通常は最高です
let cachesPath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).last!
編集:他の人のような画像
func cachedImage(localID: String) -> UIImage? {
let userDocumentsURL = URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
let cachePath = userDocumentsURL.appendingPathComponent("\(localID).png")
return UIImage(named: cachePath.path)
}
を助けてください。 NSData
という名前で保存できますが、実際はお勧めできません。 NSUserDefaults
は、小さな値の情報をキー値のペアに格納することを意味します。あなたがそこに画像を投げ始めると、それのために予約されたスペースを過負荷にする可能性があります。 NSUserDefaults
の内容はplistに書き込まれます。私はあなたがユーザーのデフォルトにアクセスするたびに、ファイル全体を読み込むと信じています。そこに大きな画像を置くと、多くの不必要なI/Oが発生します。
これを行うことを決めるのであれば、hereは画像からNSData
オブジェクトを取得する際の良い投稿です。
の取得は、ユーザーのデフォルトに画像を保存していない、と述べています。これはわずかなデータを対象としています。
あなたがしたいのは、別のビューコントローラで画像を渡すだけで、ユーザーが終了してアプリを再起動した場合でも画像を維持する気にならない場合は、画像をprepareForSegue
に渡すだけです。
まず、ビュー(コントローラ)間の一時的なデータストレージとして 'UserDefaults'を誤用しないでください。エラーが発生した場合は、' img'のタイプがプロパティリストに準拠していません。 – vadian
イメージをドキュメントに保存し、イメージへのパスを 'UserDefaults'に保存する方が簡単です。これは簡単な作業です。 –
@ MoeAbdul-Hameedどうすればいいですか? – MJP