我試圖保存一連串的聲音,我迅速連接在一起,然後加載它們。但是,所有數據都可以正確保存,但是當我嘗試加載數據時,數據所保存的所有屬性都不再存在,但它仍將存儲的數據視爲現有數據,而沒有保存時的任何屬性。我很困惑爲什麼會發生這種情況爲什麼我保存的用戶數據不能在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同步的應用程序中,如此大量的數據會大大降低同步速度。應用程序啓動時間也會受到影響。 –