Save checkmark depending on bool state of multiple data models

Hello,


I've taken some advice on this so far but noting seems to be working, any help would be massively appreciated!


So I have a fitness app, the user selects one workout before it been displayed as table view, when a cell is selected I want it to show that cell(containing an exercise) as completed by marking it with a checkmark. this works fine but I am struggling with how to save that check mark when the app is terminated and re launched.


Below I have given an example of one of the workout models and the table view controller, and struct.


Please can someone try and solve this!!


Thank you.


Josh


I have struct for the workouts as follows:


import Foundation

import UIKit


struct Workout {


var exercise : String = String()

var completed : Bool = false


init(exercise: String, completed: Bool = false) {

self.exercise = exercise

self.completed = completed

}


}


Workout model example -

import Foundation

import UIKit

import CoreData


class The600Workout {



var workoutArray = [


Workout(exercise: "Don't forget to warm up before every workout!"),

Workout(exercise: "Start with little/ no weight and work your way up"),

Workout(exercise: "------------------------------------------------------------------"),

Workout(exercise: "Pull ups | 25 Reps"),

Workout(exercise: "Lunges | 50 Reps (Low weight)"),

Workout(exercise: "Calf Raises | 50 Reps (Low weight)"),

Workout(exercise: "Shoulder press | 50 Reps (Low weight)"),

Workout(exercise: "Push ups | 50 Reps"),

Workout(exercise: "Shrugs | 50 Reps (Low weight)"),

Workout(exercise: "Leg raises | 50 Reps"),

Workout(exercise: "Bench press | 50 Reps (Low weight)"),

Workout(exercise: "More Pull ups | 25 Reps"),

Workout(exercise: "Squats | 50 Reps (Low weight)"),

Workout(exercise: "Incline Bench press | 50 Reps (Low weight)"),

Workout(exercise: "Bicep curls | 50 Reps (Low weight)"),

Workout(exercise: "Tricep pull downs | 50 Reps (Low weight)"), ]

}

                        
import UIKit


class workoutTableView: UIViewController, UITableViewDataSource, UITableViewDelegate {


import UIKit

import GoogleMobileAds


class workoutTableView: UIViewController, UITableViewDataSource, UITableViewDelegate {


@IBOutlet weak var workoutTableView: UITableView!

@IBOutlet weak var bannerAd2: GADBannerView!


var navTitle: String = ""

var workout = [Workout]()

let tlabel = UILabel()


override func viewDidLoad() {

super.viewDidLoad()


setWorkout()

workoutTableView.delegate = self

workoutTableView.dataSource = self

tlabel.text = navTitle

tlabel.textAlignment = .center

tlabel.font = UIFont(name: "Arial Rounded MT Bold", size: 30)

tlabel.adjustsFontSizeToFitWidth = true

navigationItem.titleView = tlabel

bannerAd2.adUnitID = "ca-app-pub-3940256099942544/2934735716"

bannerAd2.rootViewController = self

bannerAd2.load(GADRequest())

}


func setWorkout() {


if navTitle == "The 600 Workout" {


workout = The600Workout().workoutArray


}


else if navTitle == "5 Days for Muscle" {


workout = FiveDaysForMuscle().workoutArray


}


else if navTitle == "Marathon Ready" {


workout = MarathonReady().workoutArray

}


else if navTitle == "HIIT @ Home" {


workout = HIITAtHome().workoutArray

}


else if navTitle == "Get Strong" {


workout = GetStrong().workoutArray

}


else if navTitle == "Body Weight Blast" {


workout = BodyWeightBlast().workoutArray

}


else if navTitle == "Bands Pump" {


workout = BandsPump().workoutArray

}


else if navTitle == "******* Warm up" {


workout = QuickieWarmUp().workoutArray

}


else if navTitle == "The Best Circuit Workout" {


workout = TheBestCircuit().workoutArray

}


else if navTitle == "The Gym HIIT Workout" {


workout = GymHIIT().workoutArray

}


else if navTitle == "The Ultimate Workout" {


workout = UltimateWorkout().workoutArray

}



else if navTitle == "Warm up For Weights" {

workout = WarmUpForWeights().workoutArray

}


else if navTitle == "6 Day Bro Split" {


workout = SixDayBroSplit().workoutArray

}


else if navTitle == "Explosive Workout" {


workout = ExplosiveWorkout().workoutArray

}


else if navTitle == "Strength Circuit" {


workout = StrengthCircuit().workoutArray

}


else if navTitle == "Killer Circuit" {


workout = KillerCircuit().workoutArray

}


else if navTitle == "Fitness Test" {


workout = FitnessTest().workoutArray

}


}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return workout.count

}


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

workout[indexPath.row].completed = !workout[indexPath.row].completed

tableView.cellForRow(at: indexPath)?.accessoryType = workout[indexPath.row].completed ? .checkmark : .none

tableView.deselectRow(at: indexPath, animated: false)

}


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "prototypeCell", for: indexPath)

cell.textLabel?.text = workout[indexPath.row].exercise

cell.accessoryType = workout[indexPath.row].completed ? .checkmark : .none

cell.layer.borderWidth = 5

cell.layer.cornerRadius = 20

cell.layer.borderColor = colorLiteral(red: 0, green: 0.3285208941, blue: 0.5748849511, alpha: 1)

cell.textLabel?.textColor = UIColor.black

cell.textLabel?.adjustsFontSizeToFitWidth = true

cell.textLabel?.font = .boldSystemFont(ofSize: 15)

return cell

}

}



Save checkmark depending on bool state of multiple data models
 
 
Q