Here is the full code:
import UIKit
import CoreData
class RatingGLViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var pickerView: UIPickerView!
@IBOutlet weak var textLabel: UILabel!
let row = UserDefaults.standard.integer(forKey: "pickerViewRow")
var decisions: [NSManagedObject] = []
var selectedRating: String?
override func viewDidLoad() {
super.viewDidLoad()
self.pickerView.delegate = self
self.pickerView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
}
override func touchesBegan(_ touches: Set<UITouch>,
with event: UIEvent?) {
self.view.endEditing(true)
}
override func viewWillAppear (_ animated: Bool) {
super.viewWillAppear(animated)
}
override func didReceiveMemoryWarning()
{super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func saveRating(_ sender: Any){
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
// pickerView components
_ = ["insignificant", "little significance", "somewhat significant", "significant", "highly significant", "very highly significant"]
// Saving pickerView row
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "DecisionComponents", in: managedContext)!
let component = NSManagedObject(entity: entity, insertInto: managedContext)
UserDefaults.standard.set(row, forKey: "pickerViewRow")
component.setValue(row.self, forKeyPath: "components")
print (row) // Printing 0 instead of the selected row here
print("User Selected \(row)") // printing 0
do {
try managedContext.save()
decisions.append(component)
print ("SAVED")
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
}
extension RatingGLViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
return decisions.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let component = decisions[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = component.value(forKeyPath: "component") as? String
return cell
}
func tableView(_tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
}
let pickerTitles = ["insignificant", "little significance", "somewhat significant", "significant", "highly significant", "very highly significant"]
extension RatingGLViewController: UIPickerViewDataSource, UIPickerViewDelegate {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
// print ("TEST THREE")
return pickerTitles.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
return pickerTitles[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
selectedRating = pickerTitles[row]
UserDefaults.standard.set(row, forKey: "pickerViewRow")
textLabel.text = selectedRating
print (selectedRating!)
print (row) // printing corrected of "selectedRating"
}
}