我试图保存一连串的声音,我迅速连接在一起,然后加载它们。但是,所有数据都可以正确保存,但是当我尝试加载数据时,数据所保存的所有属性都不再存在,但它仍将存储的数据视为现有数据,而没有保存时的任何属性。我很困惑为什么会发生这种情况为什么我保存的用户数据不能在swift中正确加载?
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
}
}
副作用:用户默认是*不是一个好地方*来保存这样的应用程序资源。您应该将它们包含在应用程序包中,如果它们从未更改,或者在应用程序支持文件夹中(如果它们的话)。 –
我是一个通过swift进行文件操作的新手段,你能否解释为什么它不是很好的做法来保存到默认值,这样我就可以理解 –
对于一个系统来说太多的数据是为了容纳一小部分表示设置的信息。在iCloud同步的应用程序中,如此大量的数据会大大降低同步速度。应用程序启动时间也会受到影响。 –