为什么我保存的用户数据不能在swift中正确加载?
我试图保存一组声音,这些声音是我在swift中连接在一起的,然后再加载它们。但是,所有数据都正确地保存了,但是当我尝试加载它时,数据保存的所有属性都不再存在,但它仍然将数据视为存在,而保存时没有任何属性。我不明白为什么会这样为什么我保存的用户数据不能在swift中正确加载?,swift,nsuserdefaults,Swift,Nsuserdefaults,我试图保存一组声音,这些声音是我在swift中连接在一起的,然后再加载它们。但是,所有数据都正确地保存了,但是当我尝试加载它时,数据保存的所有属性都不再存在,但它仍然将数据视为存在,而保存时没有任何属性。我不明白为什么会这样 struct saveSound{ static func save(newSound: mergedSound = mergedSound()){ if newSound.soundName == "" || newSound.soundUrl == "" {
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
}
}
你确定你的数据确实保存了吗?您是否查看了preferences PLIST文件以进行验证?您的log语句并没有实际验证这个假设
另外,您的
声音
类NSCoding
是否符合要求?您是否实施了存档/取消存档每个属性的协议?否则(如果您声明遵从性但不处理类的自定义属性),它们将永远不会被写入(或读取),您的未归档实例将具有默认值 旁白:用户默认值不是这样保存应用程序资源的好地方。如果它们从未更改,你应该将它们包括在应用程序包中,如果它们更改了,则应将它们包括在应用程序支持文件夹中。我对通过swift进行文件操作有点陌生,你能解释一下为什么保存为默认值不是一种好做法吗,这样我就可以理解对于一个系统来说太多的数据了,而这个系统的目的是保存表示设置的少量信息。在iCloud的同步应用程序中,如此巨大的数据量会大大降低同步速度。应用程序启动时间也会受到影响。我甚至没有首选项plist lol only info.plist的可能重复项,但我如何使我的类符合nscoding,因为我肯定没有这样做。你有一些阅读要做。首选项存储在~/Library/Preferences中(其中~是您的主文件夹)。注意~/Library是一个隐藏文件夹。