如何解决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 举报,一经查实,本站将立刻删除。