2017-02-21 25 views
0

Итак, я пытаюсь изучить Swift 3 в XCode 8. И я следил за некоторыми учебниками, и я пытаюсь создать собственное приложение, которое позволит мне сохранить событие с дату и категорию.Сохранить дату на основные данные

Прямо сейчас мне трудно найти дату для основных данных. Кроме того, я хотел бы отобразить полный datestyle в поле UITextfield, но сохраните его в виде коротких датестилей в основных данных.

У кого-нибудь есть решение для этого? И, пожалуйста, обратите внимание, что я n00b, я не нахожусь во всем правильном жаргоне. Поэтому, пожалуйста, покажите мне, что мне нужно изменить, поскольку я все еще изучаю, что все разные вещи ...

Что я должен делать, это сделать функцию, которая будет форматировать строку для сохранения с помощью (атрибут 'dateOfEvent' объекта 'MyEvents' установлен на '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) 
     } 
    } 
} 
+0

Итак, у вас есть 'NSManagedObject' под названием' dateOfEvent' как часть 'MyEvents', правильно? Вы должны иметь возможность установить значение независимо от текущей даты с вашим datePicker, произнеся «new event.dateOfEvent = datePicker.date» – Pierce

+0

Спасибо, Пирс! Это сохраняет дату, однако это также экономит время. И я хочу только дату :-) – Polle

+0

@Polle нет «даты только». Сохраните фактические даты в своей базе данных и используйте форматы даты, чтобы отобразить эти значения для пользователя. – jrturton

ответ

0

Необходимо сохранить даты в качестве даты в вашей базе данных. Объект даты представляет определенный момент времени, поэтому нет «Даты без времени».

Используйте форму даты, чтобы отображать только те части, которые вас интересуют. Не путайте форматирование отображения с хранилищем данных.

Итак, все, что вам нужно, это атрибут типа Date на управляемом объекте, который вы задали для свойства date.