私はすぐに一緒に連結したサウンドの配列を保存しようとしていますが、後でそれらをロードします。しかし、すべてのデータが正しく保存されますが、ロードしようとすると、データが保持していたすべてのプロパティは存在しなくなりましたが、保存したときのプロパティがなくても既存のものとしてカウントされます。なぜこれが起こるのか混乱しています保存したユーザーデータがすばやく正しく読み込まれないのはなぜですか?
struct saveSound{
static func save(newSound: mergedSound = mergedSound()){
if newSound.soundName == "" || newSound.soundUrl == "" { print("no new data") ; return}
var sounds = loadSounds.getSounds()
sounds.append(newSound)
let archive = NSKeyedArchiver.archivedData(withRootObject: sounds)
for soun in sounds{
print(soun.soundName," - saved")
}
UserDefaults.standard.set(archive, forKey: "SavedSounds")
}
}
struct loadSounds {
static func getSounds() -> [mergedSound]{
var sounds = [mergedSound]()
var data = Data()
if UserDefaults.standard.object(forKey: "SavedSounds") as? Data != nil {
print("data exists")
data = UserDefaults.standard.object(forKey: "SavedSounds") as! Data
sounds = NSKeyedUnarchiver.unarchiveObject(with: data) as! [mergedSound]
for souns in sounds{
print(souns.soundName,sounds.count, " - loaded")
}
}
return sounds
}
}
サイドポイント:このようなアプリケーションリソースを保存するには、ユーザーのデフォルトは*良い場所ではありません。変更がない場合はアプリケーションバンドルに、そうであればApplication Supportフォルダにそれらを含める必要があります。 –
すばやくファイル操作を始めたばかりの人は、デフォルトに保存するのは良いことではない理由を説明できますか?わかりました –
設定を表す小さな情報を保持するシステムのデータが多すぎます。 iCloud-syncのアプリケーションでは、そのような巨大なデータが同期を大幅に遅くします。アプリの起動時間も影響を受ける可能性があります。 –