CoreData 的第一步

问题描述

我在 Core Data 方面大胆迈出了第一步,但遇到了一个小问题。

我想通过 CoreData 保存来自 PickerView 的数据并将其从该存储传输到标签。 当视图重新加载时,最后显示的值应该显示标签中。

我不认为我的代码有问题,但我再次面临“nil”问题。

这是代码,我做错了什么?

import UIKit
import CoreData
class TestViewController: UIViewController {
    
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

// Labels & textfields

    @IBOutlet weak var timeLabel: UILabel!
    @IBOutlet weak var hrsTextField: UITextField!
    @IBOutlet weak var minTextField: UITextField!
    @IBOutlet weak var secTextField: UITextField!
    @IBOutlet weak var timePicker: UIPickerView!

       
    var dataPickerViewTime: TimeModelPicker!
    var timeSaved = String()
 
//View did load

    override func viewDidLoad() {
        super.viewDidLoad()
        
        getDataTime()
        timeLabel.text = timeSaved
        
        dataPickerViewTime = TimeModelPicker()
        dataPickerViewTime.timeModelData = Data.getDataTime()
        timePicker.delegate = dataPickerViewTime
        timePicker.dataSource = dataPickerViewTime
        
    // Save last value from pickerView

        if let selectedRow = UserDefaults.standard.object(forKey: "saveTimePicker") as? Int {
            timePicker.selectRow(selectedRow,inComponent: 0,animated: true)
        }
        
// call timePicker changed value

        NotificationCenter.default.addobserver(self,selector: #selector(timePickerChanged),name: Notification.Name.pickersChanged,object: nil)
        
    }
    
// timePicker tnfo if value has changed

    @objc func timePickerChanged() {
        let values = timePicker.selectedRow(inComponent: 0)
        let selectedValue = dataPickerViewTime.timeModelData[values...values]
        for Time in selectedValue {
            let timeString = Time.time
            timeLabel.text = timeString
        }
    }
    
// Back to first VC

    @IBAction func back(_ sender: UIStoryboardSegue){
        dismiss(animated: true,completion: nil)
    }
    
// save "time" in CoreData

    @IBAction func save(_ sender: UIButton) {
        
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        let entity = NSEntityDescription.entity(forEntityName: "Time",in: context)
        let newEntity = NSManagedobject(entity: entity!,insertInto: context)
        newEntity.setValue(timeLabel.text,forKey: "time")
        
        do {
            try context.save()
            print("Time saved")
        } catch {
            print("Failed saving")
        }
    }

// Get data for timeLabel for view

    func getDataTime() {

        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Time")
        request.returnsObjectsAsFaults = false
        do {
            let result = try context.fetch(request)
            for data in result as! [NSManagedobject]
            {
                timeSaved = data.value(forKey: "time") as! String // -> Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
            }
        } catch {
            print("Failed")
        }
    }
        
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)