Ios 使用UserDefaults实现表视图的收藏夹部分

Ios 使用UserDefaults实现表视图的收藏夹部分,ios,xcode,nsuserdefaults,xcode9,Ios,Xcode,Nsuserdefaults,Xcode9,我目前正在为IOS开发一个有两个选项卡的应用程序。主视图包括一个包含单击时的操作的图像表,以及一个允许用户查看其喜爱的图像和操作的收藏夹视图。我目前正试图找到一种方法,在应用程序关闭后保存此收藏夹数据。对于核心数据来说这似乎很简单,但我似乎无法理解用户默认值 我在视图中有一个Favorite按钮,当用户单击Favorite按钮时,它会将图像标题添加到列表中,并使用Favorites选项卡中的列表重新加载表格。这在使用普通数组变量时工作正常。当我尝试实现UserDefaults时,当我单击Favo

我目前正在为IOS开发一个有两个选项卡的应用程序。主视图包括一个包含单击时的操作的图像表,以及一个允许用户查看其喜爱的图像和操作的收藏夹视图。我目前正试图找到一种方法,在应用程序关闭后保存此收藏夹数据。对于核心数据来说这似乎很简单,但我似乎无法理解用户默认值

我在视图中有一个Favorite按钮,当用户单击Favorite按钮时,它会将图像标题添加到列表中,并使用Favorites选项卡中的列表重新加载表格。这在使用普通数组变量时工作正常。当我尝试实现UserDefaults时,当我单击Favorites选项卡时,它似乎不会重新加载表格,但是当我关闭应用程序并使用多任务(向上滑动)重新启动它并重新启动应用程序时,表格会形成,所有数据都会被记住并设置。在应用程序关闭和重新启动时,是否有任何方法可以将数据记住并存储在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")
}
}


谢谢,如有任何帮助,我们将不胜感激。

问题描述很好。但是我们需要先看看你的代码。用您尝试过的内容编辑问题。好的,完成!希望这有帮助