I have been trying to create a "saved features" tab for my app. I embedded a button into my table view cell (which had a star icon - FavouriteStatusButton). When selected it would append the feature title (the name of the cell) to FavouriteFeatureDataBase.
@IBOutlet weak var FeatureTitle: UILabel!
var array1: [String] = []
var FavouriteFeatureDataBase = UserDefaults.standard
@IBAction func FavouriteStatusButton(_ sender: UIButton) {
array1.append(FeatureTitle.text!)
FavouriteFeatureDataBase.set(array1, forKey: "ArrayOfFilteredFeatures")
...
It only seems to do this one cell at a time - For example I select 4 cells,
1: Name1, 2: Name2, 3: Name3 and 4: Name4
Instead of getting ["Name1", "Name2", "Name3", "Name4"], I'll only get ["Name4"].
I suspect this is because it is in the UITableViewCell but I'm not sure.
As mentioned in the comments, you need to retrieve the data first.
You are storing an array - in order to retrieve it, you can use the array(forKey:) method of UserDefaults:
if let savedArray = favouriteFeatureDataBase.array(forKey: "ArrayOfFilteredFeatures") as? [String] {
array1 = savedArray
}
You should call it somewhere before you append anything to your array, ideally in viewDidLoad() or viewWillAppear(_:):
@IBOutlet weak var featureTitle: UILabel!
var array1: [String] = []
var favouriteFeatureDataBase = UserDefaults.standard
@IBAction func favouriteStatusButton(_ sender: UIButton) {
if let titleText = featureTitle.text {
array1.append(titleText)
favouriteFeatureDataBase.set(array1, forKey: "ArrayOfFilteredFeatures")
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Load the saved favourite features when the view is loaded
loadFavouriteFeatures()
}
func loadFavouriteFeatures() {
if let savedArray = favouriteFeatureDataBase.array(forKey: "ArrayOfFilteredFeatures") as? [String] {
array1 = savedArray
}
}