0
好吧,所以我想学习XCode 8中的Swift 3。我遵循了一些教程,并且正在尝试构建我自己的应用程序,它可以让我保存事件日期和类别。将核心数据保存到核心数据
现在我很难将日期保存到核心数据。最重要的是,我想在UITextfield中显示完整的日期样式,但将其保存为核心数据中的短日期样式。
有没有人有解决方案?并且请注意,我是一个n00b,我没有接受所有正确的术语。所以请告诉我我需要改变什么,因为我仍然在学习所有不同的东西......
我认为我应该做的是创建一个函数,它将格式化字符串以保存核心数据(实体'MyEvents'的属性'dateOfEvent'设置为'date'),然后从datePickerChanged函数调用它,以保持它始终更新。
我已经拿出这个到目前为止,这是从我找到的不同教程组合。
import UIKit
class addEventViewController: UIViewController, UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate {
@IBOutlet weak var addEventNameInput: UITextField!
@IBOutlet weak var addEventDateInput: UITextField!
@IBOutlet weak var addEventCategoryInput: UITextField!
var addEventCategories = ["Født", "Startede børnehave", "Startede uddannelse", "Startede job", "Flyttede hjemmefra", "Startede romantisk forhold", "Startede forhold"]
var categoryPicker = UIPickerView()
let datePicker = UIDatePicker()
func textFieldDidBeginEditing(_ textField: UITextField) {
addEventDateInput.inputView = datePicker
datePicker.datePickerMode = .date
datePicker.addTarget(self, action: #selector(datePickerChanged), for: .valueChanged)
}
func datePickerChanged(sender: UIDatePicker) {
let formatter = DateFormatter()
formatter.dateStyle = .full
formatter.timeStyle = .none
addEventDateInput.text = formatter.string(from: sender.date)
}
override func viewDidLoad() {
super.viewDidLoad()
addEventNameInput.delegate = self
addEventDateInput.delegate = self
categoryPicker.delegate = self
categoryPicker.dataSource = self
addEventCategoryInput.inputView = categoryPicker
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
// returns the number of 'columns' to display.
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
// returns the # of rows in each component..
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return addEventCategories.count
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
addEventCategoryInput.text = addEventCategories[row]
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return addEventCategories[row]
}
@IBAction func addEventButtonPressed(_ sender: Any) {
if addEventNameInput.text == "" {
} else {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let newevent = MyEvents(context: context)
newevent.nameOfevent = addEventNameInput.text!
newevent.categoryOfevent = addEventCategoryInput.text!
// Save data to coredata
(UIApplication.shared.delegate as! AppDelegate).saveContext()
// Pop back to events list
navigationController!.popViewController(animated: true)
}
}
}
所以你有一个名为'dateOfEvent'的'NSManagedObject'作为'MyEvents'的一部分,对吧?您应该可以通过说'new event.dateOfEvent = datePicker.date'来设置当前日期与datePicker的值。 – Pierce
谢谢,皮尔斯! 这确实保存日期,但它也节省时间。我只想要日期:-) – Polle
@Polle没有“仅限日期”。将实际日期保存到数据库中,并使用日期格式化程序将这些值显示给用户。 – jrturton