Сохранить дату дня в метке - PullRequest
0 голосов
/ 15 января 2019

У меня проблема с сохранением даты и времени дня на этикетке. У меня есть TodoList, который при добавлении чего-либо показывает дату и время, когда вы это сделали. Что я хочу сделать, это сохранить его. Для сохранения я попытался использовать пользовательские настройки по умолчанию, но у меня всегда есть дата и время дня, а не даты, когда я это сделал. Я думаю, что я делаю что-то не так. Любое предложение о том, как я могу сохранить дату?

@IBOutlet weak var Data: UILabel!

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    Data.text = String(describing: DateFormatter())

    let dataFormatter = DateFormatter()
    dataFormatter.dateFormat = "dd/MM/yy H:mm a"
    Data.text = dataFormatter.string(from: .init())

    UserDefaults.standard.setValue(Data.text!, forKey: "Data")
    Data!.text=UserDefaults.standard.string(forKey: "Data")
}

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Сначала я расскажу о некоторых основах разработки приложений в первой части, затем отвечу на ваш вопрос во второй части и, наконец, объясню, почему я представил основы разработки приложений из первой части.

Доменная модель

Обычно, когда вы создаете приложение, вы сначала определяете модель.

Объект модели группирует данные, необходимые для конкретной проблемной области или тип решения, которое вы пытаетесь построить. Они состоят из свойств, которые представляют атрибуты типа, и у них иногда есть методы для обновления и изменения своих собственных свойств.

В большинстве случаев вы создаете объект модели, определяя новую структуру или класс. И вы обычно определяете структуру или класс в новом файле Swift.

Это отрывок из Unit 4.3 Model View Controller из Разработка приложений с помощью Swift - Apple Education. Очень интересная книга, если вы новичок в разработке приложений.

Модель элемента todo в вашем приложении может выглядеть следующим образом:

struct TodoItem: Codable {
  let content: String
  let creationDate: Date
  init(with string: String) {
    content = string
    creationDate = Date()
  }
}

Сохранение элементов todo с датами создания

Теперь, чтобы ответить на ваш вопрос о том, как сохранить разные вопросы с соответствующей датой их создания, рекомендуется хранить эти вещи и в вашей модели. Например, вы можете создать новый массив для хранения всех различных TodoItem с (повторное использование TodoItem из моего предыдущего примера), например:

var todoList = [TodoItem]()

Когда пользователь создает новый элемент: добавьте TodoItem к todoList, используя

todoLists.append(TodoItem(with: someUserContent))

Мотивация

  • Определив свою модель в качестве структуры TodoItem и todoList, вы теперь можете быть уверены, что при каждом обращении к списку элементов соответствующая дата создания будет точной датой создания элемента. Это потому, что мы объявили creationDate константой.
  • Путем согласования структуры TodoItem с Codable Теперь вы можете использовать такие библиотеки, как Nirma / Default , чтобы легко сохранять и извлекать todoList в и из пользовательских значений по умолчанию.
  • Поскольку у вас теперь есть массив, содержащий все ваши todoItems, очень легко отобразить эти даты в вашем ярлыке, используя:

.

dateLabel.text = dateFormatter.string(from: todoList[itemIndex].creationDate)
0 голосов
/ 15 января 2019

Хорошо, насколько я понимаю, у вас есть список заданий, и вы пытаетесь сэкономить время, на которое редактировался каждый элемент.

UserDefaults - это пара ключ-значение, и из того, что я вижу, вы пытаетесь использовать один и тот же ключ для, возможно, всех ваших ячеек, что будет означать, что они переопределят друг друга.

Кроме того, вы пытаетесь переписать значение, существующее каждый раз, прежде чем использовать его, это правильное поведение, которое вы желаете?

...