我目前正在开发一个有2个标签的IOS应用程序。一个主视图,包含一个图像表,当您单击它们时带有动作,以及一个允许用户查看自己喜欢的图像和动作的收藏夹视图。我正在尝试找到一种方法来在应用程序关闭后保存这些收藏夹数据。核心数据似乎很简单,但我似乎无法理解UserDefaults。
我在用户单击“收藏夹”按钮时出现的视图中有一个收藏夹按钮,它会将图像标题添加到列表中,并使用“收藏夹”选项卡中的该列表重新加载表格。这与正常的数组变量一起正常工作。当我尝试实现UserDefaults时,当我点击“收藏夹”选项卡时,它似乎没有重新加载表格,但是当我关闭应用程序并使用多任务处理重新启动它(向上滑动)并重新启动应用程序时,表格和所有数据被记住并设置。当应用程序关闭以及应用程序重新启动时使用该变量时,是否有任何方法可以记住数据并将其存储在UserDefaults变量中,并且在应用程序运行时使用常规变量从中重新加载表?
这是表的最爱标签代码:
import UIKit
var favRow = 0
class FavouritesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let favouritesavedimages = userDefaults.object(forKey: "Data") as? [String] ?? [String]()
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
tableView.reloadData()
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return favouritesavedimages.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "imageCell2") as? FavouritesImageCellTableViewCell {
cell.configureCellFavourites(image: UIImage(named: favouritesavedimages[indexPath.row])!)
return cell
} else {
return FavouritesImageCellTableViewCell()
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
favRow = indexPath.row
}
override func viewWillAppear(_ animated: Bool) {
let favouritesavedimages = userDefaults.object(forKey: "Data") as? [String] ?? [String]()
super.viewWillAppear(animated)
tableView.reloadData()
}
}
这是我的带有收藏夹按钮的页面的代码:
import UIKit
let userDefaults = UserDefaults.standard
var favouriteImages: [String] = []
var isFavourite = [false,false,false,false,false,false,false,false,false,false,false,false,false,f alse,false,false,false,false,false,false,false,false,false,false,false]
class SecondViewController: UIViewController {
let favourites = userDefaults.object(forKey: "FavData") as? [Bool] ?? [Bool]()
override func viewDidLoad() {
super.viewDidLoad()
if !isFavourite[row]
{
favouriteButton.image = UIImage(named: "favourite")
} else {
favouriteButton.image = UIImage(named: "defavourite")
}
secondImageView.image = secondImages[row]
secondTitle.text = tutorialTitles[row]
secondTutorialText.text = tutorialText[row]
}
@IBAction func favouriteButtonTapped(_ sender: Any) {
if !isFavourite[row] {
setOnFavourite()
} else {
setOnDeFavourite()
}
}
@IBOutlet weak var favouriteButton: UIBarButtonItem!
@IBOutlet weak var secondTutorialText: UITextView!
@IBOutlet weak var secondTitle: UILabel!
@IBOutlet weak var secondImageView: UIImageView!
func setOnFavourite()
{
isFavourite[row] = true
favouriteButton.image = UIImage(named: "defavourite")
favouriteImages.append(String(row + 1))
userDefaults.set(favouriteImages, forKey: "Data")
userDefaults.set(isFavourite, forKey: "FavData")
}
func setOnDeFavourite()
{
isFavourite[row] = false
favouriteButton.image = UIImage(named: "favourite")
favouriteImages = favouriteImages.filter{$0 != String(row)}
userDefaults.set(favouriteImages, forKey: "Data")
userDefaults.set(isFavourite, forKey: "FavData")
}
}
谢谢,任何帮助都将不胜感激。