用户默认数组相应地保存 plist 上的项目



好的,所以我只是有一个快速的问题,这是否可能。我的 plist 上有一系列字典,它在视图控制器 1 上显示在大约 800 个项目的单元格列表中。如果用户点击其中一个单元格并转到视图控制器 2,我可以像每个单元格关联的用户默认值数组一样吗?例如,如果我有苹果、香蕉、猕猴桃等水果清单。用户点击 Apple,在用户默认值上,它知道它点击了第一个单元格并输入用户默认值 1。我试图做的是为每个单元格提供一个用户默认值,以便用户可以将这些项目保存到他们的收藏夹列表中,我只是使用 userdefault 将该特定项目保存到收藏夹列表中。因为目前当我使用 userdefault 时,它会一次保存所有项目,因为如果我将一个项目的布尔值设置为 true,它会对所有项目执行此操作,因为 plist 单元格上的每个项目都使用相同的 userdefault 键。就像在我的视图控制器 2 上一样

var isFavorite = UserDefaults.standard.bool(forKey: "isFavorite")
@IBAction func addToFav(_ sender: UIButton){
isFavorite = !isFavorite
UserDefaults.standard.set(isFavorite, forKey: "isFavorite")
UpdateButtonAppearance()
}
func UpdateButtonAppearance(){
if isFavorite{
let image = UIImage(named: "addFav")
favButton.setImage(image, for: .normal)
} else{
let image = UIImage(named: "addFavFilled")
favButton.setImage(image, for: .normal)
}
}

因此,为了避免以相同的方式保存所有列表,我想知道如何使用 userdefault 方法单独保存每个单元格?

创建一个字典,其中包含所有收藏夹的键,例如"Apple"、"Banana"、"Kiwi"和"true"作为值。UserDefaults应该很乐意为您保存字典,如果它理解键和值,即它们都是字符串。

let kFavoritesKey = "Favorites"
class FavoritesStorage {
// Instantiate with some default favorites
var dict = ["Apple":"true", "Banana":"true", "Kiwi":"true"]
init() {
loadFromDisk()
}
func favor(_ key: String) {
dict[key] = "true"
saveToDisk()
}
func unFavor(_ key: String) {
dict[key] = nil
saveToDisk()
}
func isFavored(_ key : String) -> Bool {
return dict[key] != nil
}
func toggle(_ key: String) {
let favored = isFavored(key)
if favored {
unFavor(key)
} else {
favor(key)
}
}
// These can be changed to save/read somewhere else besides user defaults
private func saveToDisk() {
UserDefaults.standard.set(dict, forKey: kFavoritesKey)
}
private func loadFromDisk() {
if let diskVersion = UserDefaults.standard.object(forKey: kFavoritesKey) as? [String: String] {
dict = diskVersion
}
}
}
let favorites = FavoritesStorage()
var isAppleFavorited = favorites.isFavored("Apple") // true
var isMangoFavorited = favorites.isFavored("Mango") // false
if !isMangoFavorited {
favorites.favor("Mango")
}
isMangoFavorited = favorites.isFavored("Mango") // true
favorites.toggle("Apple")
isAppleFavorited = favorites.isFavored("Apple") // false
if let diskVersion = UserDefaults.standard.object(forKey: kFavoritesKey) {
print(diskVersion)
}

最新更新