NSUserDefaults
は、ユーザーデフォルトを格納するために明示的に指定されています。NSUserDefaultsが情報を.plistファイルに書き込むため、画像は特にそこに属しません。生の画像データは.plistファイルに属しません。それとは別に、それはあまり効率的でもありません。.plistファイルに保存する情報が多くなればなるほど、読み込むのに時間がかかります。特定のイメージをロードする場合は、.plistファイル全体をロードする必要があります。これは、必要のない他のイメージもすべてロードする必要があります。簡単に言って:do not do。
画像を保存するために、より適切で効率的なアプローチは、アプリケーションの文書ディレクトリ(所属先)に保存することです。
アプリケーションのドキュメントディレクトリに自分の画像を保存した後、あなたのsaveImage
機能
let theImage = UIImage(named: "yourImage")
saveImage(image: theImage!, fileName: "yourImageName")
を呼び出す
func saveImage(image: UIImage, fileName: String) {
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
let path = documentsURL?.appendingPathComponent(fileName)
do {
try UIImagePNGRepresentation(image)?.write(to: path!)
} catch {
// Handle possible errors here
print(error.localizedDescription)
}
}
あなたの画像を保存する:あなたはこのようにそれを行うことができ
、あなたはカールするイメージのファイルパスを取得し、後でイメージを取得するためにCoreDataデータベースに保存します。
CoreDataでもを自動化これはちょっとした工夫であなたのために行います。バイナリデータ属性に「外部ストレージを許可する」チェックボックスをオンにすると、CoreDataはデバイスのどこかにイメージを保存し、パフォーマンスを維持するためにイメージを実際のイメージではなくデータベースに保存します高い。ここにはmore information about thatがあります。
Appleはこう言います。「デフォルトシステムでは、アプリケーションがユーザーの好みに合わせて動作をカスタマイズできます。 'NSUserDefaults'は、あなたのアプリのためのplist - userプリファレンスにそのようなものを保存するためのものです。 *資産保管用ではありません。 – Moritz
はい、私はそれを使用して実際の不利な点を参照してくださいすることはできません。 – allenlinli
NSUserDefaultsはモノリシックなファイルなので、イメージアセットをそこに格納すると、パフォーマンスの問題などが発生します。セキュリティ上の問題App Storeの拒否が起こる可能性もあります。フレームワークと戦わず、意図したとおりに使用する理由は他にもたくさんあります。 – Moritz